2010-07-18 4 views
0

Je rencontre un comportement étrange lors de l'utilisation de NSOpeation. J'appelle une fonction (-createTagView) qui crée un UIButton pour l'ajouter ensuite à une vue. Pour une raison quelconque, il ne les ajoute pas. Si j'appelle la fonction de l'extérieur de la NSOperation tout fonctionne bien.NSOperation n'ajoute pas de sous-vue à la vue principale

Des idées? Merci.

Ce que je crée l'NSOperation (dans un objet ViewController)

> NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(createTagView:) object:data]; 
> [operationQueue addOperation:operation]; 
> [operation release]; 

Et ceci est la fonction appelée ([vue Tag] est le UIButton):

-(void) createTagView:(NSMutableArray *) data 
{ 
NSInteger t_id = (NSInteger)[data objectAtIndex:0]; 
NSString *t_name = (NSString *)[data objectAtIndex:1]; 
NSString *t_rawname = (NSString *)[data objectAtIndex:2]; 


Tag *t = [[Tag alloc] initWithId:(NSInteger)t_id name:t_name rawname:t_rawname]; 

[self.view addSubview:[t view]]; 

[t release]; 
} 

Répondre

0

NSOperation utilise un séparé thread à exécuter, vous devez appeler [addSubview:] dans le thread principal. Il existe une méthode [object performSelectorOnMainThread: withObject: waitUntilDone:] - vous pouvez l'utiliser pour ajouter la sous-vue.

[self.view performSelectorOnMainThread:@selector(addSubview:) withObject:aView waitUntilDone:YES]; 
Questions connexes