2012-04-03 30 views
3

我不明白这个文档中的例子:timeIntervalSinceNow方法应该显示一个正值,但是我们怎么能达到代码中提到的“5”? (我认为它是0或多或少,或-10,-20,-30等...但我们怎样才能得到一个正值,如5):您的帮助用负值(CLLocation示例)计算'timeIntervalSinceNow'?

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    // test the age of the location measurement to determine if the measurement is cached 
    // in most cases you will not want to rely on cached measurements 
    NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow]; 
    if (locationAge > 5.0) return; 

谢谢

回答

9

如果timeIntervalSinceNow调用的结果是否定的(意味着时间戳在过去(在这种情况下,它始终是)),它将被转换为正数。例如,-2.5将变成+2.5(反之亦然)。

然后,您测试倒符号值,以查看它是否大于5.0 - 在这种情况下,这意味着时间戳超过五秒钟之前。如果是这样,你不会对位置数据做任何事情,因为它太旧而无法使用。

就个人而言,我会写这个没有符号反转,在测试用负数:

if([[newLocation timestamp] timeIntervalSinceNow] < -5.0) return; 
+0

感谢IuliusCæsar,你将如何强制cllocation总是发送新的位置而不是缓存的位置? (不只是让应用程序不做任何事情,以防止值被缓存,但告诉应用程序:“如果你有一个缓存值,重新启动cllocation”?) – Paul 2012-04-03 16:22:04

+0

你不能;它会尽快给你一个新的。所有你可以做它等待它。 – 2012-04-03 16:24:54

+0

谢谢,我无法找到默认缓存的时间量?你知道关于它的一些事吗? – Paul 2012-04-04 04:42:25

3

那是什么的NSDate文档不得不说timeIntervalSinceNow:

接收机和当前日期和时间之间的间隔。如果接收者早于当前日期和时间,则返回值为负值。

在这种情况下,时间戳记录在过去,它总是早于'现在'。另一方面,如果您使用timeIntervalSince1970,结果将是正面的。

+0

谢谢卢卡斯! – Paul 2012-04-03 16:17:08