在不同的线程上的RSS不起作用,但在主线程上工作正常

时间:2010-11-19 14:11:15

标签: iphone nsthread

我正在尝试在我的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];
}

1 个答案:

答案 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是否为空,如果是,则开始设置指标动画,然后启动新线程。