2011-02-25 14 views
5

Pregunta rápida, ¿hay alguna manera de especificar un @selector que sea un método en otro objeto? Actualmente he manipulado una solución utilizando un método local para llamar al método remoto, pero se siente torpe.especificando @selector para el método en otro objeto?

[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(timerLocation) userInfo:nil repeats:YES]]; 

.

- (void)timerLocation { 
    [[self dataModel] startUpdatingLocation]; 
} 

Respuesta

11

Eso es lo que la parte target del método NSTimerscheduledTimerWithTimeInterval:target:selector:userInfo:repeats: es para. (es decir: especifica el objeto que desea llamar como destino y el nombre del método del objeto como selector.)

+4

Expandiendo la idea aquí, un selector no es un puntero de función. Es un nombre de mensaje. No está vinculado a ninguna clase en particular. Es por eso que debes pasar tanto el objetivo como el selector. Para evitar errores tipográficos, normalmente recomiendo pasar -Wselector (la advertencia "Selector no declarado") para asegurarme de que @selector() realmente exista en algún lugar del sistema en tiempo de compilación (esto no garantiza que el selector sea válido para la clase que es pasado a, solo que existe). En ese caso, generalmente necesitará #incluir el encabezado de su objeto de destino. –

+0

Voto +1, ya que ayuda mucho. Gracias. :) – iLearner

2
[NSTimer scheduledTimerWithTimeInterval:10 target:someOtherObject selector:@selector(timerLocation) userInfo:nil repeats:YES]; 
Cuestiones relacionadas