Question

J'écris une méthode d'instance dans ClassName.m:

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

Et appelez-le avec

[self methodName:parameter]; 
Un message d'avertissement apparaîtra, mais le code fonctionne toujours avec succès.

Est-ce parce que je n'ai pas créé d'instance de la classe? Pourquoi la méthode fonctionne toujours normalement? Et quelle est la bonne façon d’appeler l’auto-méthode pour éviter l’avertissement?

Était-ce utile?

La solution

La première étape pour recevoir de l'aide avec un avertissement serait de l'afficher:)

Je suppose qu’il s’agit d’un message non reconnu? Si c’est le cas, c’est que, même si le compilateur voit l’appel à " methodName " il ne sait pas si cela est valable 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 pour que le compilateur l'ait vue avant de l'utiliser dans les appels.

b) le déclarer dans l'interface de classe. Ex.

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

Autres conseils

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 méthode la plus appropriée pour appeler une méthode sur soi-même.

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 recevez ressemble à quelque chose du type "Object Foo peut ne pas répondre à -methodName: " et puis il vous indique que le type de retour par défaut est id . En effet, le compilateur n'a pas vu de déclaration ou de définition de -methodName: au moment où il compile le code à l'endroit 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.

Si vous recevez un avertissement, c'est peut-être parce que la signature de la méthode n'est pas dans une interface.

@interface foo ....

-(void)method;

Une fois que l'implémentation est é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 cela, mais le message d'avertissement est agaçant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top