2011-01-29 8 views
0

同じコードに関して別の問題を解決しましたが、私は2つの問題を分けたいと思います。別のViewController.mからAppDelegate.mの配列変数にアクセスする

リストを表示するviewcontrollerがロードされるたびに再度実行する必要がないように、私のAppDelegateにRssパーサによって生成されたテーブルを格納したいと思っています。

AppDelegate.h

#import <Three20/Three20.h> 

#import "NewsRssParser.h" 
#import "NewsRss.h" 

@class NewsRssParser; 
@class NewsRss; 

@interface AppDelegate : NSObject <UIApplicationDelegate,NewsRssParserDelegate> { 
    NewsRssParser * _rssParser; 
    NSMutableArray * _newsRssArray; 
} 

@property(readwrite, retain) NewsRssParser * rssParser; 
@property(readwrite, retain) NSMutableArray * newsRssArray; 

@end 

ApDelegate.m

[...]

@implementation AppDelegate

@synthesize rssParser = _rssParser;@synthesize newsRssArray = _newsRssArray;アプリケーションの実行の特定の段階で

[...]

、テーブルが適切にRSSリーダーに登録パーサーによって取り込まれます。

  • (ボイド)MyFunctionを{

    NSMutableArrayの* dsItems = [[NSMutableArrayのALLOC] INIT]自動解放を:これが起こるとき、私は別のビューコントローラに表示可能な形式に変換したいです]; (self.rssParser.rssItemsでNewsRss * rssItem) {NSStringの* rssItemTitle = [rssItemタイトル]を

    。 NSString * rssItemAuthor = [@ "par" stringByAppendingString:[rssItem author]]; NSString * rssItemDescription = [rssItemの説明]; NSString * rssItemLinkUrl = [rssItem linkUrl]; NSString * rssItemImageUrl = [rssItem mediaUrl];

    TTTableMessageItem *tMsgItem = [TTTableMessageItem itemWithTitle:rssItemTitle caption:rssItemAuthor text:rssItemDescription timestamp:nil imageURL:rssItemImageUrl URL:rssItemLinkUrl]; 
    [self.newsRssArray addObject:tMsgItem]; 
    [dsItems addObject:tMsgItem]; 
    

    }

}

これはのNSLogとGDBで[_newsRssArray count]を示すことによって動作することを制御します。それは私がRSSフィードに持っている記事の数である10を返します。

これは、記事のリストを表示するためにViewControllerをロードしたいときです。私はそれをこのように実行します。

NewsVc.hを

#import <Three20/Three20.h> 

@protocol NewsVcDelegate; 

@class AppDelegate; 

@interface NewsVc : TTTableViewController { 
    id<NewsVcDelegate> _delegate; 

    AppDelegate * _appDelegate; 
} 

@property(nonatomic,assign) id<NewsVcDelegate> delegate; 
@property(nonatomic, retain) AppDelegate * appDelegate; 

@end 

@protocol NewsVcDelegate <NSObject> 

- (void)NewsVc:(NewsVc*)controller didSelectObject:(id)object; 

@end 

[...] 

- (void)loadNewsFromParser { 

    self.tableView.allowsSelection = NO; 

    //reload the table view 
    TTListDataSource *ds = [[TTListDataSource alloc] autorelease]; 
    //NSMutableArray *dsItems = [[[NSMutableArray alloc] init] autorelease]; 

    NSLog(@"NewsVC(loadNewsFromParser):count/newsRssArray=%d", [self.appDelegate.newsRssArray count]); 
    NSLog(@"NewsVC(loadNewsFromParser):count/rssItems=%d", [self.appDelegate.rssParser.rssItems count]); 

    [ds initWithItems:self.appDelegate.newsRssArray]; 

    self.dataSource = ds; 
    self.tableView.allowsSelection = YES; 

} 

[...] 

しかしのViewControllerのこの機能では、私は空の配列を参照し、同様NewsVc.m私がNewsRssの解析されたデータに直接アクセスしようとするときのように。 NewsVcからこの配列にアクセスするにはAppDelegate/NewsVcのコードで何が間違っていますか?

ありがとうございました!私は今日非常に遅く感じるこの...続きを読む

答えて

5

あなたはappDelegateをどこに割り当てますか?あなたのビューコントローラ初期化のどこかに次のような行がなければなりません:

self.appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
+0

本当にありがとうございました。 – ceyquem

関連する問題