Pregunta

Escribo un método de instancia en ClassName.m:

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

Y llámelo usando

[self methodName:parameter]; 
Aparecerá una advertencia, pero el código aún se ejecuta correctamente.

¿Esto es porque no he creado una instancia de la clase? ¿Por qué el método todavía funciona normalmente? ¿Y cuál es la forma correcta de llamar a un método propio para evitar la advertencia?

¿Fue útil?

Solución

Bueno, el primer paso para recibir ayuda con una advertencia sería publicar la advertencia :)

¿Supongo que se trata de un mensaje no reconocido? Si es así, es porque aunque el compilador ve la llamada a " methodName " no sabe si eso es válido para el objeto o no.

Supongo que su código parece:

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

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

Usted puede:

a) Coloque la función 'methodName' anteriormente en el archivo para que el compilador la haya visto antes de usarla en las llamadas.

b) declararlo en la interfaz de clase. Por ejemplo,

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

Otros consejos

¿Cuál es la advertencia que recibes?

¿Tiene una definición del método en su archivo de encabezado?

La sintaxis que usa es la forma más adecuada de llamar al método en sí mismo.

El método funcionará porque los métodos de Objective-C se resuelven en tiempo de ejecución. Espero que la advertencia que recibas sea algo como: "Object Foo puede no responder a -methodName: " y luego le dice que está predeterminando el tipo de retorno a id . Esto se debe a que el compilador no ha visto una declaración o definición de -methodName: en el momento en que compila el código donde lo llama. Para eliminar la advertencia, declare el método en la interfaz de la clase o en una categoría de la clase.

Si recibe una advertencia, podría deberse a que la firma del método no se encuentra en una interfaz.

@interface foo ....

-(void)method;

Una vez que se haya escrito la implementación, la advertencia debería desaparecer, ya que no es la primera vez que el compilador ha visto el método. Funcionará sin hacer esto, pero el mensaje de advertencia es molesto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top