J'ai un thread (en particulier un NSOperation) qui fonctionne pour charger des images pour moi pour une vue de défilement lorsque ma vue principale les demande. N'importe quel nombre de ces NSOperations peut être mis en file d'attente à la fois. Donc ça va avec le chemin de fichier que je lui donne et charge l'image depuis le disque (comme UIImages) puis renvoie l'objet à ma vue principale en utilisant performSelectorOnMainThread: et en passant ma mainview un NSDictionary de l'objet, et une valeur d'image ID. Ma vue principale est alors censée insérer l'objet image et la chaîne d'identification de l'image dans un NSMutableDictionary dont elle dispose pour que la vue principale puisse l'utiliser. J'ai vérifié que NSMutableDictionary est alloué et initialisé correctement, mais lorsque la méthode que les appels NSOperation essaie d'ajouter les objets au dictionnaire ne se passe rien. J'ai vérifié que l'objet et la chaîne que je reçois du dictionnaire que le fil m'a envoyé ne sont pas nulles ou quoi que ce soit mais cela ne fonctionne pas. Est-ce que je ne fais pas quelque chose de bien ou n'utilise pas une mauvaise technique? Qu'est-ce que quelqu'un suggère de faire dans une situation comme celle-ci où j'ai besoin d'ajouter UIImages à un NSMutableDictionary à partir d'un thread? Merci beaucoup!iPhone: Impossible de définir l'objet reçu à partir de thread dans NSMutableDictionary
Voici le code NSOperation J'utilise:
- (void)main {
NSString *filePath = [applicaitonAPI getFilePathForCachedImageWithID:imageID andSize:imageSize];
UIImage *returnImage = [[UIImage alloc] initWithContentsOfFile:filePath];
if (returnImage) {
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:2];
[dict setObject:returnImage forKey:@"IMAGE"];
[dict setValue:[NSString stringWithFormat:@"%d", imageID] forKey:@"IMAGE_ID"];
NSDictionary *returnDict = [[NSDictionary alloc] initWithDictionary:dict];
[dict release];
[mainViewController performSelectorOnMainThread:@selector(imageLoaderLoadedImage:) withObject:returnDict waitUntilDone:NO];
[returnDict release];
}
}
Et voici la méthode sur le thread principal:
- (void)imageLoaderLoadedImage:(NSDictionary *)dict {
UIImage *loadedImage = [dict objectForKey:@"IMAGE"];
NSString *loadedImage = [dict valueForKey:@"IMAGE_ID"];
[imagesInMemoryDictionary setObject:loadedImage forKey:loadedImageID];
[self drawItemsToScrollView];
}
Publier du code. –
@Dave Delong ok J'ai ajouté du code. – Alexander
Le code que j'avais en dernier était erroné en ce sens qu'il montrait que je passais nil au fil principal alors qu'en fait je ne le suis pas, c'était une faute de frappe. – Alexander