将NSString转换为performSelector的精确数字:afterDelay:

时间:2009-12-08 00:54:38

标签: iphone objective-c nsstring nstimeinterval

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

例如,如果字符串是“89283”,那么这意味着我必须等待89.283秒。所以我想知道用于iPhone的Objective-C中最好的方法是将这个字符串转换为我可以传递给performSelector的精确值:afterDelay:function。这是我的示例代码,但我猜它不准确。

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

我认为myDelay值确实应该是NSTimeInterval,但我不知道如何从我拥有的字符串中获取它。提前谢谢。

4 个答案:

答案 0 :(得分:4)

以下是允许双精度更改的代码。

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

使用doubleValue将字符串作为double,这样就可以避免整数除法。 NSTimeInterval的类型在iphone上定义为double,因此您可以将double结果存储到其中,然后将其传递给afterDelay:选择器的一部分。

答案 1 :(得分:1)

NSTimeInterval是一个double,你正在进行整数除法。只需将其类型从int更改为double,您就应该做得很好。

答案 2 :(得分:1)

使用运行循环延迟,或者使用NSTimer是非常不准确的,因为您必须始终等待上一个事件被完全处理。执行时,您的代码可能比预期的运行时间超过100毫秒。

因此,尽管精度很高,但准确性可能会严重不足。

根据您需要这种精确计时的原因,您可以对计算进行更正并使差异无法实现。

答案 3 :(得分:0)

没有足够的代表来添加评论,但要确保你将myDelay转换为浮动除以100.0,否则你将得不到你所期望的。