我正在与一个web服务进行通信以检索进入我作为一个NSString函数的数值。这个数字告诉我的时间的确切数额要等到我执行另一个动作,这是至关重要的,它是准确的。

作为一个例子,如果字符串是“89283”,那么这意味着我必须等待89.283秒。所以我想知道的最佳方式在Objective-C的iPhone这个字符串转换为精确值,我可以传递到performSelector:afterDelay:功能。下面是我的示例代码,但我猜它不准确的。

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

我觉得myDelay值确实应该是一个NSTimeInterval,但我不知道怎么做,从我的字符串。由于事先。

有帮助吗?

解决方案

下面用改变代码以允许双精度。

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

使用的doubleValue为了得到字符串作为双这样可以尽量避免整数除法。 NSTimeInterval的类型被定义为在iPhone上加倍,所以可以将双结果存储到它,然后将其传递给afterDelay:选择器的一部分

其他提示

NSTimeInterval是双重的,你正在做的整数除法。刚刚从int其类型更改为double,你应该是不错的。

使用运行循环,因为你,或者用的NSTimer

延迟是非常不准确的,因为你必须等待要完全处理之前的事件。当执行,你的代码可以运行100毫秒以上的比你所期望的那样。

因此,尽管你的精度高,准确度可能会受到严重缺乏。

根据你为什么需要这种精确定时,您可以改正的,你的计算和呈现差异没有实际意义。

没有足够的代表,只是添加评论,但要确保,如果你转换myDelay浮动您通过100.0分,否则你不会得到你所期望的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top