performSelectorOnMainThread avec un délégué
Céroce
Membre, Modérateur
Bonjour à tous,
Dans mon appli, j'ai un thread secondaire créé grâce à une NSBlockOperation. Pour signaler la fin du traitement, je voudrais utiliser la délégation:
Malheureusement, j'ai un warning qui me dit que la méthode n'est pas connue. La méthode est pourtant bien définie dans NSThread.h, sous la forme d'une catégorie sur NSObject:
Mon délégué est déclaré ainsi:
Que dois-je écrire pour que le compilateur sache que le délégué répond à la méthode définie dans la catégorie NSThreadPerformAdditions ?
Dans mon appli, j'ai un thread secondaire créé grâce à une NSBlockOperation. Pour signaler la fin du traitement, je voudrais utiliser la délégation:
<br />
[delegate performSelectorOnMainThread:@selector(rendererDidRender:) withObject:self waitUntilDone:YES];<br />
Malheureusement, j'ai un warning qui me dit que la méthode n'est pas connue. La méthode est pourtant bien définie dans NSThread.h, sous la forme d'une catégorie sur NSObject:
<br />
@interface NSObject (NSThreadPerformAdditions)<br />
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;<br />
Mon délégué est déclaré ainsi:
<br />
@class CeMandelbrotRender;<br />
@protocol CeMandelbrotRenderDelegate <NSObject><br />
- (void) rendererDidRender:(CeMandelbrotRender *)render;<br />
@end<br />
<br />
@interface CeMandelbrotRender : NSObject<br />
@property (nonatomic, strong) id <CeMandelbrotRenderDelegate> delegate;<br />
Que dois-je écrire pour que le compilateur sache que le délégué répond à la méthode définie dans la catégorie NSThreadPerformAdditions ?
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
en
(Bizarre, il me semblait avoir essayé).
De plus pour garder une cohérence, tu ne devrais pas forcément exécuter le code que tu appeles sur ton delegate forcément dans le mainThread, mais plutôt dans le thread appelant (celui qui a forké ton thread secondaire). Ou dans le cas de GCD, la queue sur laquelle s'exécute ton code avant que tu fork ton thread.
Bon, ok, en général ce thread appelant (ou cette queue appelante) c'est la mainThread (la main Queue). Mais sait-on jamais, autant rendre ton code flexible et réutilisable.
[/size][/font][/color]
Mais, justement, je me posais la question sur la manière de s'y prendre si ce n'était pas le thread principal.
Et du coup tu peux garder ton delegate de type [font=courier new,courier,monospace]id<CeMandelbrotRenderDelegate> delegate[/font] et remplacer ton par un simple
Les Blocks c'est la vie /thumbsup.gif' class='bbc_emoticon' alt='' />