我正在尝试在我的iphone应用程序中的另一个线程上获取rss解析器,但是当我这样做时,我只获得旋转指示器(即,什么都没有)。但是如果我在viewDidAppear中注释掉[NSThread ....]的调用,并取消注释[self loadData]行,那么一切正常(但它不在另一个线程上)。我错过了什么吗?感谢您在此提供的任何见解!!
这是代码。
- (void)viewDidAppear:(BOOL)animated {
[NSThread detachNewThreadSelector:@selector(loadData) toTarget:self withObject:nil];
//[self loadData];
[super viewDidAppear:animated];
}
- (void)loadData {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
if (items == nil) {
[activityIndicator startAnimating];
Parser *rssParser = [[Parser alloc] init];
[rssParser parseRssFeed:@"http://www.mywebsite.com/xml" withDelegate:self];
[rssParser release];
} else {
[self.tableView reloadData];
}
[pool release];
}
答案 0 :(得分:0)
所有UI更改都应在主线程上进行:
- (void)viewDidAppear:(BOOL)animated {
if (items == nil)
{
[activityIndicator startAnimating];
[NSThread detachNewThreadSelector:@selector(loadData) toTarget:self withObject:nil];
}
else
{
[self.tableView reloadData];
}
[super viewDidAppear:animated];
}
- (void)loadData {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Parser *rssParser = [[Parser alloc] init];
[rssParser parseRssFeed:@"http://www.mywebsite.com/xml" withDelegate:self];
[rssParser release];
[pool release];
}
检查items
是否为空,如果是,则开始设置指标动画,然后启动新线程。