Pregunta

Tengo un nstimer que está configurado como este:

[NSTimer scheduledTimerWithTimeInterval:0.5 target:timerTarget selector:NSSelectorFromString(targetSelector) userInfo:nil repeats:YES];

¿Cómo puedo obtener el valor de devolución del timerTarget ¿método?

¿Fue útil?

Solución

No puedes, porque no hay valor de retorno.

Quoth el documentación del scheduledTimerWithTimeInterval::::: método:

El selector debe tener la siguiente firma:

- (void)timerFireMethod:(NSTimer*)theTimer

Ahora tu pudo Declare su método de manera diferente y luego devuelva un valor en él, pero luego su método tiene una firma diferente de la que NSTIMER espera. Eso funcionará bien ahora, pero no se garantiza que funcione en el futuro, puede romperse en cualquier momento, especialmente un cambio en el tiempo de ejecución.

Más concretamente, dado que Nstimer no espera un valor de devolución, no tiene disposiciones para recibir una y pasarlo en cualquier lugar.

Además, como dije en mi comentario sobre la respuesta de Adam, tu llamada a scheduledTimerWithTimeInterval::::: Solo regresa una vez, y (como dijo Adam) lo hace de inmediato. No obtienes un valor de retorno cada 0.5 segundos, porque no obtienes una devolución cada 0.5 segundos, obtienes una devolución solamente (por temporizador).

Independientemente de la información que esté descubriendo en su método de temporizador, debe actuar en consecuencia o enviar un mensaje con la información de allí a otro método.

Otros consejos

¿Qué estás haciendo con el valor de retorno? El objetivo se ejecuta asincrónicamente 0.5 segundos después. La llamada a scheduledTimerWithTimeInterval:target:selector:useInfo:repeats: Devuelve instantáneamente, momento en el que el objetivo no se ha ejecutado. Si realmente necesita el valor de retorno en este momento, entonces no se moleste con un temporizador y simplemente llame al selector normalmente.

Continuando con la buena respuesta de Adam, si cree que necesita el valor de retorno del método objetivo después de que termine de funcionar, entonces lo que probablemente desee hacer es que el método objetivo en sí perpetúe alguna acción adicional.

Por ejemplo, puede usar el parámetro "UserInfo" para pasar una referencia al objeto interesado (¿self?). El método objetivo podría, en lugar de devolver un valor, enviar el valor actualizado a Self con un selector pre-organizado. Por ejemplo, en su método de destino, podría terminar con algo como:

[[theTimer userInfo] setWhatever:blah];

Conceptualmente, debe tomar el consejo de Adam y considerar el hecho de que el método que llama el temporizador está sucediendo en el futuro y si desea conectarse de nuevo a una clase específica y su flujo de trabajo, debe conectarse de alguna manera usted mismo.

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