Im ayant quelques difficultés à faire passer un objet NSNumber à différents threads. J'appelle une fonction sur viewDidload qui charge certains objets à partir des données de base en tant que processus d'arrière-plan. qui appelle une autre fonction qui boucle à travers les objets chargés pour voir si des images associées sont déjà téléchargées. si ce n'est pas le cas, téléchargez les images de manière asynchrone et enregistrez-les localement. La chose est que je dois effectuer startDownloadFor: atIndex: sur le thread principal. Mais l'application se bloque à cause de l'objet NSNumber qui est passé. voici le code ..Iphone: objets Passing et les fils multiples
- (void)viewDidLoad {
...
...
[self performSelectorInBackground:@selector(loadImages) withObject:nil];
}
-(void)loadImages{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
...
...
[self fillInImages];
[pool release];
}
-(void)fillInImages{
NSString *imageURL;
for (int i=0; i < [dataManager.objectList count]; i++) {
...
if ([dataManager.RelatedImages Image] == nil) {
//[self startDownloadFor:imageURL atIndex:[NSNumber numberWithInt:i]; // << WORKS FINE
[self performSelectorOnMainThread:@selector(startDownloadFor:atIndex:) withObject:(imageURL, [NSNumber numberWithInt:i]) waitUntilDone:YES]; // << CRASHES
...
}else {
...
}
...
}
...
}
-(void)startDownloadFor:(NSString*)imageUrl atIndex:(int)indexPath{
NSString *indexKey = [NSString stringWithFormat:@"key%d",indexPath];
...
}
Quelle est la bonne façon de procéder?
Merci