2009-03-03 5 views
-2

j'écris une méthode d'instance dans ClassName.m:Comment utiliser la méthode self class sur iPhone? (Question conceptuelle)

-(void)methodName:(paraType)parameter 
{...}

et l'appeler à l'aide

[self methodName:parameter];
Un avertissement apparaîtra, mais le code fonctionne toujours avec succès. Est-ce parce que je n'ai pas créé une instance de la classe? Pourquoi la méthode fonctionne toujours normalement? Et quelle est la bonne façon d'appeler la méthode de soi pour empêcher l'avertissement?

Répondre

5

Eh bien la première étape à recevoir l'aide d'un avertissement serait d'afficher l'avertissement :)

Je suppose qu'il ya quelque chose au sujet d'un message non reconnu? Si c'est le cas, c'est parce que bien que le compilateur voit l'appel à "nomMéthode", il ne sait pas si cela est valide pour l'objet ou non.

Je suppose que votre code ressemble à;

-(void) someFunc 
{ 
    ... 
    [self methodName:parameter]; 
    ... 
} 

-(void)methodName:(paraType)parameter 
{ 
... 
} 

Vous pouvez soit;

a) Placez la fonction 'methodName' plus tôt dans le fichier afin que le compilateur l'ait vu avant qu'il ne soit utilisé dans les appels. B) le déclarer dans l'interface de la classe.

Par exemple.

// Foo.h 
@interface Foo { 
... 
} 
-(void) methodName:(paraType)parameter; 
@end 
1

Quel est l'avertissement que vous recevez?

Avez-vous une définition de la méthode dans votre fichier d'en-tête?

La syntaxe que vous utilisez est la façon dont propper appelle la méthode self.

+0

Le problème peut être basique, mais cela me dérange beaucoup. J'oublie vraiment de définir la méthode dans le fichier head. Merci en effet. –

1

La méthode fonctionnera car les méthodes Objective-C sont résolues au moment de l'exécution. Je suppose que l'avertissement que vous obtenez est quelque chose comme "Object Foo ne peut pas répondre à -methodName:" et puis il vous indique qu'il est par défaut le type de retour à id. C'est parce que le compilateur n'a pas vu une déclaration ou une définition de -methodName: au moment où il compile le code où vous l'appelez. Pour supprimer l'avertissement, déclarez la méthode dans l'interface de la classe ou dans une catégorie de la classe.

1

Si vous recevez un avertissement, cela peut être dû au fait que la signature de méthode ne se trouve pas dans une interface. Une fois l'implémentation écrite, l'avertissement devrait disparaître car ce n'est pas la première fois que le compilateur voit la méthode. Cela fonctionnera sans faire cela, mais le message d'avertissement est ennuyeux.

Questions connexes