Question

Je communique avec un webservice pour récupérer une valeur numérique qui vient dans ma fonction comme NSString. Ce numéro me dit la quantité précise de temps à attendre jusqu'à ce que je joue une autre action, et il est essentiel que ce soit précis.

À titre d'exemple, si la chaîne est « 89283 », cela signifie que je dois attendre 89.283 secondes. Je voudrais donc savoir la meilleure façon en Objective-C pour iPhone pour convertir cette chaîne à une valeur précise que je peux passer à la performSelector afterDelay: fonction. Voici mon exemple de code, mais je devine son pas exacte.

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

Je pense que la valeur myDelay devrait vraiment être un NSTimeInterval, mais je ne suis pas sûr de savoir comment faire que de la chaîne que j'ai. Merci à l'avance.

Était-ce utile?

La solution

Voici le code avec des modifications pour permettre la double précision.

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

Utilisez doubleValue afin d'obtenir la chaîne comme un double de sorte que vous pouvez éviter la division entière. Le type de NSTimeInterval est défini comme un double sur l'iPhone, de sorte que vous pouvez stocker le double résultat en elle et de passer ensuite à la afterDelay:. une partie du sélecteur

Autres conseils

NSTimeInterval est un double, et que vous faites la division entière. Il suffit de changer le type de int à double et vous devriez être bon.

Les retards à l'aide de boucles d'exécution, comme vous êtes, ou avec NSTimer sont très imprécis parce que vous devez toujours attendre l'événement précédent soit entièrement traitée. Lors de l'exécution, votre code pourrait être en cours d'exécution 100ms ou plus tard que prévu.

Ainsi, malgré votre grande précision, l'exactitude sera probablement sérieusement défaut.

Selon pourquoi vous avez besoin de ce moment précis, vous pourrez peut-être apporter des corrections à vos calculs et rendre la discussion différence.

n'ont pas assez rep juste ajouter un commentaire, mais assurez-vous que si vous convertissez myDelay flotter que vous divisez par 100.0 sinon vous ne serez pas obtenir ce que vous attendez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top