Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将NSString转换为performSelector:afterDelay的精确数字:_Iphone_Objective C_Nsstring_Nstimeinterval - Fatal编程技术网

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

Iphone 将NSString转换为performSelector:afterDelay的精确数字:,iphone,objective-c,nsstring,nstimeinterval,Iphone,Objective C,Nsstring,Nstimeinterval,我正在与Web服务通信,以检索作为NSString进入函数的数值。这个数字告诉我在执行另一个操作之前等待的确切时间量,而且精确是至关重要的 例如,如果字符串是“89283”,那么这意味着我必须等待89.283秒。所以我想知道Objective-C中iPhone将这个字符串转换为精确值的最佳方法,我可以将这个值传递给performSelector:afterDelay:函数。这是我的示例代码,但我猜它不准确 NSString *myDelayString = @"89283"; int myDel

我正在与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,但我不确定如何从我的字符串中得到它。提前感谢。

NSTimeInterval是双精度的,您正在进行整数除法。只要将其类型从
int
更改为
double
,您就应该很好了。

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

没有足够的rep来添加注释,但请确保如果将myDelay转换为float,则除以100.0,否则您将无法得到预期的结果。

没有足够的rep来添加注释,但请确保将myDelay转换为float除以100.0,否则将得不到预期的结果。

以下是代码,其中进行了一些更改,以允许双精度

NSString *myDelayString = @"89283";
NSTimeInterval myDelay = [myDelayString doubleValue]/1000;
[self performSelector:@selector(myFunction) withObject:nil afterDelay:myDelay];
使用doubleValue将字符串获取为double,这样可以避免整数除法。
NSTimeInterval的类型在iphone上定义为double,因此您可以将double结果存储到其中,然后将其传递给选择器的afterDelay:部分。

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

NSString *myDelayString = @"89283";
NSTimeInterval myDelay = [myDelayString doubleValue]/1000;
[self performSelector:@selector(myFunction) withObject:nil afterDelay:myDelay];
使用doubleValue将字符串获取为double,这样可以避免整数除法。
NtimeInterval的类型在iphone上定义为double,因此您可以将double结果存储到其中,然后将其传递给afterDelay:选择器的一部分。

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

因此,尽管您的精度很高,但可能严重缺乏准确性


根据您需要这种精确计时的原因,您可能能够对计算进行更正,并将差异模拟出来。

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

因此,尽管您的精度很高,但可能严重缺乏准确性


根据您需要这种精确计时的原因,您可能可以对计算进行更正,并使差异变得毫无意义。

@Jason-touché。在我真正点击“提交”之前,我应该确认我发布的内容是正确的,嗯?@Jason-touché。在我真正点击“提交”之前,我应该确认我发布的内容是正确的,嗯?谢谢大家的回答。非常感谢大家的支持,谢谢大家的回答。非常感谢大家的支持。