Pregunta

Me estoy comunicando con un servicio web para recuperar un valor numérico que entra en mi función como un NSString. Este número me dice que la cantidad exacta de tiempo para esperar hasta que realice otra acción, y es fundamental que sea preciso.

A modo de ejemplo, si la cadena es "89283", entonces esto significa que debo esperar 89.283 segundos. Así que me gustaría saber la mejor manera en Objective-C para el iPhone para convertir esta cadena en un valor preciso que me puede pasar a la performSelector: afterDelay: función. Aquí está mi código de ejemplo, pero supongo que no es precisa.

NSString *myDelayString = @"89283";
int myDelay = [myDelayString intValue]/1000;
[self performSelector:@selector(myFunction) withObject:nil afterDelay:myDelay];

Creo que el valor myDelay realmente debe ser un NSTimeInterval, pero no estoy seguro de cómo hacer que a partir de la cadena que tengo. Gracias de antemano.

¿Fue útil?

Solución

Aquí está el código con los cambios para permitir la doble precisión.

NSString *myDelayString = @"89283";
NSTimeInterval myDelay = [myDelayString doubleValue]/1000;
[self performSelector:@selector(myFunction) withObject:nil afterDelay:myDelay];

Uso doubleValue con el fin de obtener la cadena como un doble para que pueda evitar la división entera. Tipo de NSTimeInterval se define como un doble en el iPhone, por lo que puede almacenar el doble resultado en ella y luego pasarlo a la afterDelay:. parte del selector

Otros consejos

NSTimeInterval es un doble, y que está haciendo la división entera. Sólo cambia su tipo de int a double y usted debe ser bueno.

Los retrasos mediante bucles de ejecución, tal como eres, o con NSTimer son muy inexactos, ya que debe esperar siempre para el evento anterior que se procesa por completo. Cuando se ejecuta, el código podría ser correr 100 ms o más tarde de lo esperado.

Así que a pesar de su alta precisión, la exactitud es probable que se carece en serio.

En función de qué necesita este momento preciso, es posible que pueda hacer correcciones en sus cálculos y hacer que la diferencia discutible.

no tienen representante suficiente simplemente agregar un comentario, pero asegúrese de que si convierte myDelay flotar que se divide por 100,0 de lo contrario no obtendrá lo que espera.

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