applicationDidEnterBackground方法中的backgroundTimeRemaining值不正确

时间:2014-09-11 00:07:36

标签: ios objective-c iphone

我正在研究在iOS8设备上运行的Xcode6 beta 2上的Objective C项目。我在方法中打印backgroundTimeRemaining: applicationDidEnterBackground

- (void)applicationDidEnterBackground:(UIApplication *)application
{
  NSLog:(@"Background time remaining %f seconds", application.backgroundTimeRemaining);
  NSLog:(@"Background time remaining %f seconds", application.backgroundTimeRemaining);
  NSLog:(@"Background time remaining %f seconds", application.backgroundTimeRemaining);
}

我收到的结果是:

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000秒

9.995252秒

9.991967秒

为什么它会在第一个日志(1797693 ...)上输出这个大值?

由于

2 个答案:

答案 0 :(得分:1)

我发现了一个似乎有效的快速而肮脏的修复方法。在请求applicationTimeRemaning之前让线程休眠一下:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
  [NSThread sleepForTimeInterval:.01];
  NSLog:(@"Background time remaining %f seconds", application.backgroundTimeRemaining);
}

但这显然不是一个理想的解决方案。

答案 1 :(得分:0)

backgroundTimeRemaining将返回NSTimeInterval,这实际上只是double值。

因此,我相信,在它可以注册时间间隔之前(它会在剩余时间内返回给你#34;太快")它会给你一个双倍可以代表的最大值。

The `double` data type gives a range of approximately 1.7E–308 to 1.7E+308 for type double.

...这就是为什么你得到那个荒谬冗长的价值。

快乐的编码! :)