2010-11-19 3 views
0

Я пытаюсь получить rss-парсер в другом потоке в моем приложении iphone, но когда я это делаю, я получаю только индикатор поворота (т. Е. ничего). Но если я прокомментирую вызов [NSThread ....] в viewDidAppear и раскомментирую строку [self loadData], все работает (но тогда это не на другой поток). Я что-то упускаю? Спасибо за любое понимание, которое вы можете предоставить здесь!RSS в другой теме не работает, но отлично работает, когда на основной теме

Вот код.

- (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

Все изменения пользовательского интерфейса должны быть сделаны в основном потоке:

- (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 является недействительным, если оно есть, начать анимировать индикатор и затем начать новую тему.

+0

Спасибо .. Это имеет смысл, но я просто попробовал, но все равно результат только в показателе поворота. Опять же, если я прокомментирую строку NSThread и поставлю [self loadData] в этот момент, это работает, что заставляет меня думать, что что-то с вызовом NSThread неверно или что-то ... вы думаете? – Allen

+0

В соответствии с этим: http: //www.iphoneexamples.com/, вы правильно используете потоки. Вы пробовали 'performSelectorInBackground:'? –

+0

Да, хорошо, что работает, и теперь я удивляюсь, почему один работает, а другой не делает. Кажется странным. – Allen

Смежные вопросы