2009-09-24 7 views
0

Le code ci-dessous se comporte comme prévu mais le compilateur ne cesse de me dire ceci: avertissement: « StatusViewController » ne peut pas répondre à « -beginLoadingThreadData »Comment se débarrasser de l'avertissement <Class> peut ne pas répondre à <Selector>?

Comment puis-je me débarrasser de cet avertissement et le plus important pourquoi Xcode est d'avis que l'affaire?

voici mon code:

[self beginLoadingThreadData]; // called in the loadDidView block 

- (void)beginLoadingThreadData 
{ 
    [NSThread detachNewThreadSelector:@selector(loadThreadData) toTarget:self withObject:nil]; 
} 

- (void)loadThreadData 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    [NSThread sleepForTimeInterval:2]; 
    [self performSelectorOnMainThread:@selector(finishedLoadingThreadData) withObject:nil waitUntilDone:NO]; 
    [pool release]; 
} 

- (void)finishedLoadingThreadData 
{ 
    [[BusinessLogic instance] startTracking:self]; 
} 

Répondre

7

Déclarez cette méthode avant de l'utiliser. Je suppose que c'est une méthode privée, auquel cas vous devez ajouter une extension de classe en haut du fichier de mise en œuvre:

@interface MyClass() 
- (void) beginLoadingThreadData; 
@end 

Si c'est une méthode publique, assurez-vous que vous avez déclaré que la méthode dans votre tête et #import ed l'en-tête en haut du fichier d'implémentation.

+0

Je dois avoir vérifié 3 fois et j'ai vu la déclaration ... plus qu'une application J'ai besoin d'un ophtalmologiste - merci Peter! – amok

1

Vous devez soit déplacer la définition de loadingThreadData avant la définition de viewDidLoad, ou le définir dans le fichier d'en-tête pour StatusViewController, par exemple en insérant -(void)beginLoadingThreadData; avant la @end dans le fichier d'en-tête (probablement StatusViewController.h).

La raison en est que si vous ne le faites pas, lorsque le compilateur atteint votre méthode viewDidLoad, et voit l'appel à beginLoadingThreadData, il n'a pas encore vu la définition de beginLoadingThreadData, et n'a pas été assuré (en voyant une déclaration avec la signature de la méthode dans le fichier d'en-tête) qu'une telle définition existe. Par conséquent, il vous avertit que la méthode que vous essayez d'appeler peut ne pas exister.

Questions connexes