2010-11-19 33 views
0

J'essaie d'obtenir un analyseur rss sur un thread différent dans mon application iphone, mais quand je fais cela, je n'ai que l'indicateur de rotation (c.-à-d. rien). Mais si je commente l'appel [NSThread ....] dans viewDidAppear, et décommentez la ligne [self loadData], tout fonctionne (mais pas sur un thread différent). Est-ce que je manque quelque chose? Merci pour toute idée que vous pouvez fournir ici !!RSS sur un thread différent ne fonctionne pas, mais fonctionne très bien quand sur le thread principal

Voici le code.

- (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]; 
} 

Répondre

0

Toutes les modifications de l'interface utilisateur doivent être effectuées sur le thread principal:

- (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]; 
} 

Vérifiez si items est nulle, si elle est, commencer à animer l'indicateur et puis démarrez le nouveau thread.

+0

Merci .. Cela a du sens, mais je l'ai juste essayé, mais il ne reste que l'indicateur de rotation. Encore une fois, si je commente la ligne NSThread, et que je mets [self loadData] à ce moment-là, cela fonctionne, ce qui m'amène à penser que quelque chose avec NSThread n'est pas correct ou quelque chose ... vous pensez? – Allen

+0

Selon ce: http: //www.iphoneexamples.com/, vous utilisez le filetage correctement. Avez-vous essayé 'performSelectorInBackground:'? –

+0

Oui, bien cela fonctionne, et maintenant je me demande pourquoi on travaille et l'autre doesn ..... semble étrange – Allen