Domanda

sto comunicando con un webservice per recuperare un valore numerico che viene nella mia funzione come un NSString. Questo numero mi dice che la quantità precisa di tempo per aspettare fino a quando ho eseguire un'altra azione, ed è fondamentale che sia preciso.

Per fare un esempio, se la stringa è "89.283", allora questo significa che devo aspettare 89.283 secondi. Così mi piacerebbe conoscere il modo migliore in Objective-C per iPhone per convertire questa stringa per un valore preciso che posso passare al performSelector: afterDelay: la funzione. Ecco il mio codice di esempio, ma sto cercando di indovinare la sua non è accurata.

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

Credo che il valore myDelay in realtà dovrebbe essere un NSTimeInterval, ma non sono sicuro di come fare che dalla stringa che ho. Grazie in anticipo.

È stato utile?

Soluzione

Qui è il codice con le modifiche per consentire la doppia precisione.

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

Usa doubleValue al fine di ottenere la stringa come un doppio in modo da poter evitare la divisione intera. Tipo di NSTimeInterval è definito come un doppio su iPhone, in modo da poter memorizzare il doppio risultato in esso e poi passarlo al afterDelay:. parte del selettore

Altri suggerimenti

NSTimeInterval è un doppio, e si sta facendo divisione intera. Basta cambiare il tipo da int a double e si dovrebbe essere buono.

I ritardi utilizzando i cicli di esecuzione, come siete, o con NSTimer sono molto imprecisi perché si deve sempre attendere l'evento precedente di essere pienamente elaborata. Durante l'esecuzione, il codice potrebbe essere in esecuzione 100 ms o più tardi del previsto.

Così, nonostante la vostra alta precisione, la precisione sarà probabilmente gravemente carente.

A seconda del motivo per cui avete bisogno di questo tempi precisi, si può essere in grado di apportare correzioni ai vostri calcoli e rendano privo differenza.

non hanno abbastanza rep di aggiungere solo un commento, ma assicuratevi se si converte myDelay a stare a galla che si divide per 100,0 altrimenti non sarà possibile ottenere ciò che vi aspettate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top