Dans ce cas, vous souhaitez probablement utiliser le modèle délégué. Dans votre fichier .h de classe film-maker:
@protocol MovieMakerDelegate;
@interface MovieMaker : NSObject
{
id<MovieMakerDelegate> delegate;
...
}
@property (nonatomic, assign) id<MovieMakerDelegate> delegate;
...
@end
@protocol MovieMakerDelegate <NSObject>
- (void)movieMaker:(MovieMaker *)maker didSomething:(id)result;
@end
... et dans son .m:
@implementation MovieMaker
@synthesize delegate;
...
- (void)makeMovie
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
...
[self performSelectorOnMainThread:@selector(notifyDelegateOfDoingSomethingWithObject:) withObject:someObject waitUntilDone:YES];
[pool release];
}
- (void)notifyDelegateOfDoingSomethingWithObject:(id)someObject
{
[self.delegate movieMaker:self didSomething:someObject];
}
...
@end
Puis, dans l'en-tête de votre contrôleur, déclare qu'il prend en charge le protocole MovieMakerDelegate, comme ceci:
@interface MyController : Whatever <MovieMakerDelegate>
et dans votre .m, avant d'appeler votre -detachNewThreadSelector:etc:
, appelez movieMaker.delegate = self;
. Implémentez la méthode -movieMaker:didSomething:
sur votre classe de contrôleur et vous êtes prêt à partir.
merci pour votre réponse. Bien que cette fois je pense qu'il y avait une solution plus simple que j'ai besoin seulement d'appeler une méthode, mais je vais certainement l'utiliser plus tard. Merci. – whg
@whg: Cela n'a pas d'importance. Une vue ne devrait généralement pas connaître son contrôleur de toute façon. Cela vaut toujours la peine d'en faire une relation de délégué, avec un protocole, même si le protocole n'aura qu'une seule méthode. Cela facilite la réutilisabilité et la modifiabilité (il sera plus facile de changer cette application ou de faire un nouveau/port à une plate-forme différente). –