2010-06-30 2 views
0

J'ai essayé d'ajouter un bouton après l'exécution d'un analyseur (sur un thread séparé). Je comprends que vous ne pouvez pas interagir avec les éléments de l'interface utilisateur sur un thread autre que le thread principal.Ajouter UIButton après l'exécution de l'analyseur (sur un thread séparé)

Je ne veux pas utiliser une minuterie ou un while ... donc ma question est

Une fois que l'analyseur se fait que suggérez-vous que je fais pour ajouter le bouton à la vue? Je ne veux pas qu'il soit ajouté auparavant parce que l'utilisateur arrivera à une table vide. Je ne veux pas non plus recharger la table une fois terminé car cela présente d'autres problèmes pour moi.

le performSelector sur le fil principal ne semble pas fonctionner pour moi non plus ..? Im un peu perdu ici ...

Des suggestions?


Voici où je coup d'envoi à un autre thread pour démarrer l'analyseur (Dans AppDelegate)

// begin background downloads 
[NSThread detachNewThreadSelector:@selector(parseNewData) toTarget:self withObject:nil]; 

Ma fonction parseNewData (En AppDelegate)

-(void)parseNewData { 

    //start network activity spinner and release controller when done 
    RootViewController * root = [[RootViewController alloc] init]; 
    [root downloadIcon]; 
    [root release]; 

    //create pool to avoid memory leak 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 


    // get the XML path and start parsing 
    NSURL *pathURL = [NSURL URLWithString:@"http://www.mysite.com/file.xml"]; 
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:pathURL]; 
    [parser setDelegate:self]; 
    [parser parse]; 

    //drain pool 
    [pool drain]; 
    [pool release]; 

} 

Parser Avez-fini (En AppDelegate)

- (void)parserDidEndDocument:(NSXMLParser *)parser 
{ 

    // parser is finished, we can now kill the network activity icon on root view controller 
    RootViewController * root = [[RootViewController alloc] init]; 
    [root killDownloadIcon]; 
    [root performSelectorOnMainThread:@selector(unhideShowtimesButton) withObject:nil waitUntilDone:NO]; 
    [root release]; 

} 

Mon unhideShowtimesButton sur (en RootViewController)

-(void)unhideShowtimesButton { 
    showtimesButton.hidden = FALSE; 
} 

je fais à mon unhideShowtimesButton (vérifié par point de rupture), mais son juste ignorant complètement le cache = False.

+0

qu'en est-il des notifications? – ennuikiller

+0

J'ai ajouté du code, qu'est-ce qui vous dérange? Merci! – Louie

Répondre

1

Vous créez une nouvelle instance RootViewController dans chacune des fonctions. Cela semble faux. Vous devez utiliser une seule instance dans le code. Mon intuition est que puisque les instances de RootViewController sont différentes, l'occurrence de showTimesButton que vous essayez de cacher est différente de celle qui est affichée.

+0

qui a du sens! Laissez-moi vous donner une photo – Louie

+0

ive corrigé les instances, mais en ignorant toujours l'instruction "unhide". :(Merci pour la suggestion si – Louie

Questions connexes