Alors, déjà y a un truc qu'il faut que tu saches... Ici :
@implementation Test<br /><br />- (IBAction)DisplayOYAImage:(id)sender imageArray:(NSArray *)theArray {<br /> <br /> [NSThread detachNewThreadSelector:@selector(loadImageIntoOYAMatrixThreaded:) <br /> toTarget:self <br /> Â Â withObject:theArray];<br /> <br /> [self sizeToCells]; // matrix se redimmentonne pour les ascenseurs<br /> [self setNeedsDisplay:YES]; // On rafraichi l'affichage<br /> [self selectCellAtRow:CurrentSelectedRow column:CurrentSelectedColumn];<br /> <br />}
Le code qui est derrière "detachNewThreadSelector" va s'exécuter tout de suite, sans attendre que le thread soit terminé... Alors bon, je sais pas trop si c'est ce qui est voulu, mais il faut faire super gaffe à ces trucsÂ
Ensuite, il faut absolument mettre [NSThread exit] à la fin de la fonction threadée (pour l'autorelease pool, c'est fait, c'est bien )
Je continue à inspecter :P
[Edit] Fais gaffe à éviter les noms de variable avec des majuscules, c'est perturbant... ("NumberOfRows" par exemple)
[Edit 2]Â Au lieu de mettre une boucle "while" ( "while(currentImage < nbOfPictures)" ) j'aurais mis une boucle "for" là , question de lisibilité... Mais bon, c'est un détail
[Edit 3] Pour le reste, faudrait le projet parce que sans, c'est difficile de voir ce qui se passe.
Bon, déjà le "[NSThread exit];" il faut le mettre à la fin de ta méthode "DisplayOYAImage" et pas après l'appel de "detachNewThreadSelector", sinon tu vas au devant d'ennuis !
Mais comme je l'ai dit au dessus, il ne va pas attendre d'avoir fait "loadImageIntoOYAMatrixThreaded" avant de faire "sizeToCells" ; il va les faire en parallèle, or "sizeToCells" modifie les dimensions de la vue tandis que loadImageIntoOYAMatrixThreaded les utilise, donc c'est un beau bazar !
merci beaucoup, je viens de faire des modifications et ça roule nickel. Il reste une chose , si je relance la fonction DisplayOYAImage et que les anciens threads n'ont pas terminés, comment puis je faire pour les stopper ?
Réponses
Ici :
Le code qui est derrière "detachNewThreadSelector" va s'exécuter tout de suite, sans attendre que le thread soit terminé...
Alors bon, je sais pas trop si c'est ce qui est voulu, mais il faut faire super gaffe à ces trucsÂ
Ensuite, il faut absolument mettre [NSThread exit] à la fin de la fonction threadée (pour l'autorelease pool, c'est fait, c'est bien )
Je continue à inspecter :P
[Edit] Fais gaffe à éviter les noms de variable avec des majuscules, c'est perturbant... ("NumberOfRows" par exemple)
[Edit 2]Â Au lieu de mettre une boucle "while" ( "while(currentImage < nbOfPictures)" ) j'aurais mis une boucle "for" là , question de lisibilité... Mais bon, c'est un détail
[Edit 3] Pour le reste, faudrait le projet parce que sans, c'est difficile de voir ce qui se passe.
[Fichier joint supprimé par l'administrateur]
Bon, déjà le "[NSThread exit];" il faut le mettre à la fin de ta méthode "DisplayOYAImage" et pas après l'appel de "detachNewThreadSelector", sinon tu vas au devant d'ennuis !
Ensuite, tu appelles ça :
Mais comme je l'ai dit au dessus, il ne va pas attendre d'avoir fait "loadImageIntoOYAMatrixThreaded" avant de faire "sizeToCells" ; il va les faire en parallèle, or "sizeToCells" modifie les dimensions de la vue tandis que loadImageIntoOYAMatrixThreaded les utilise, donc c'est un beau bazar !
je viens de faire des modifications et ça roule nickel.
Il reste une chose , si je relance la fonction DisplayOYAImage et que les anciens threads n'ont pas terminés, comment puis je faire pour les stopper ?
http://forum.macbidouille.com/index.php?showtopic=154181