2010-01-29 5 views
3

J'essaye de configurer un NSTimer sur un délégué - je suis tellement nouveau à l'objectif-c alors excuses si cela n'a pas beaucoup de sens. Mais ce que j'ai écrit est:NSTimer avec la méthode déléguée

animationTimer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)((1.0/60.0) * animationFrameInterval) target:self.delegate selector:@selector(drawView) userInfo:nil repeats:TRUE]; 

Malheureusement, cela ne fonctionne tout simplement pas. Quelqu'un peut me diriger dans la bonne direction? Mon esprit a frit !!

+0

Désolé l'erreur que je reçois dans le rapport de l'accident est la suivante: [mugalugAppDelegate drawView]: sélecteur non reconnu envoyé à l'instance Ce qui signifie qu'il ne peut pas trouver la bonne méthode? – FlimFlam

Répondre

3

Vous avez raison.

Ajoutez simplement deux points dans le nom de la méthode, c'est-à-dire @selector (drawView :). De plus, par convention, les codeurs de l'objectif-c utilisent OUI et NON.

+0

Ahh merci beaucoup - a travaillé un régal !! – FlimFlam

4

La signature de méthode pour drawView est probablement incorrecte. À partir de la référence de classe NSTimer:

Le message à envoyer à la cible lorsque le temporisateur se déclenche. Le sélecteur doit avoir la signature suivante:

- (void)timerFireMethod:(NSTimer*)theTimer

Ainsi, votre méthode drawView devrait ressembler à ceci:

- (void)drawView:(NSTimer*)theTimer 
{ 
// Draw the view 
} 

En outre, corriger votre code pour être ce (notez les deux points suivants "drawView"):

animationTimer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)((1.0/60.0) * animationFrameInterval) target:self.delegate selector:@selector(drawView:) userInfo:nil repeats:TRUE]; 

Sur une note de côté, Je ne suis pas sûr de ce que votre drawView est responsable (je suppose que dessiner une vue). Cependant, il existe des mécanismes intégrés pour le dessin, qui devraient être suivis (sauf dans de rares circonstances). Généralement, si vous avez un NSView, vous appelez le setNeedsDisplay, ce qui obligera l'interface utilisateur à indiquer à votre NSView de se redessiner en appelant les numéros de votre NSView drawRect:. Je ne mentionne que cela puisque vous avez dit que vous étiez nouveau à Objective-C, donc vous ne pouvez pas être au courant de cela, et finir par écrire plus de code que nécessaire. Si vous suivez cette conception, vous pouvez avoir votre minuteur appelez setNeedsDisplay périodiquement.

Questions connexes