2009-02-26 25 views
44

Estoy tratando de construir una aplicación para iPhone. He creado un método
así:¿Cómo puedo llamar a un método en Objective-C?

- (void)score { 
    // some code 
} 

y he intentado llamar en otro método como este:

- (void)score2 { 
    @selector(score); 
} 

Pero no funciona. Entonces, ¿cómo llamo a un método correctamente?

Respuesta

23

Creo que lo que estamos tratando de hacer es:

-(void) score2 { 
    [self score]; 
} 

La sintaxis [object message] es la forma normal de llamar a un método en Objective-C. Creo que la sintaxis @selector se usa cuando el método que se llama debe determinarse en tiempo de ejecución, pero no sé lo suficiente como para darle más información al respecto.

+0

@selector le da el "nombre" de un método en una forma que Objectiv e-C puede usar para enviar mensajes. Se usa de forma análoga a un puntero de función. – Chuck

27

Sugiero que lea The Objective-C Programming Language. La parte sobre mensajería es específicamente lo que quiere aquí, pero todo le ayudará a comenzar. Después de eso, tal vez intente hacer algunos tutoriales para tener una idea antes de comenzar a crear sus propias aplicaciones.

+6

@fijiaaron: No dije "RTFM". Dije que esta pregunta era en un nivel tan elemental que si tuviera que preguntarlo, iba a encontrar su experiencia en Objective-C muy frustrante y leyendo que la guía introductoria era un buen comienzo en el camino correcto. Enséñale a un hombre a pescar, ¿sabes? Personalmente, encuentro que este tipo de respuesta es mucho más útil que un vómito de código de calidad desconocida. – Chuck

5

Utilice esta:

[self performSelector:@selector(score) withObject:nil afterDelay:0.2]; 
+2

Me he estado preguntando por un tiempo si era posible agregar demoras a un método. Nunca tuve el requisito de hacerlo, pero siempre me pregunto si se podría hacer y cómo se haría. :) Buena esa. Llegó por una cosa y terminó encontrando algo útil. – Jiraheta

16

llamando al método es así

[className methodName] 

sin embargo si quieres que llamar al método en la misma clase que puede utilizar auto

[self methodName] 

todo lo anterior es debido a que su método no estaba tomando ningún parámetro

Sin embargo, si su método le lleva parámetros tendrá que hacerlo de esta manera

[self methodName:Parameter] 
+0

Esto parece claro e incluye un parámetro, que es útil, incluso si no fuera por el simple ejemplo de "puntaje". – Matt

1
[self score]; instead of @selector(score) 
Cuestiones relacionadas