我刚刚解决了关于同一段代码的另一个问题,但我想分开我的两个问题。
我想在我的AppDelegate中存储由Rss解析器生成的表,这样每次加载显示列表的viewcontroller时都不需要再次执行它。为此,我有以下代码:
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] autorelease];
for(NewsRss * rssItem in self.rssParser.rssItems) { NSString * rssItemTitle = [rssItem title]; NSString * rssItemAuthor = [@“par”stringByAppendingString:[rssItem author]]; NSString * rssItemDescription = [rssItem description]; 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];
}
}
我通过在NSdb中显示gdb中的[_newsRssArray count]
来控制它的工作原理。它返回10,这是我在RSS提要中的文章数量。
这是我想加载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
NewsVc.m
[...]
- (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的这个函数中,我看到数组为空,以及当我尝试直接访问NewsRss的解析数据时。我的AppDelegate / NewsVc代码能够从NewsVc访问这个数组有什么问题?
感谢您的帮助!我今天感觉很慢,坚持这个......
答案 0 :(得分:5)
您在哪里指定appDelegate
?在视图控制器初始化中某处必须有这样的一行:
self.appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];