6

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

- (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;

谢谢你的帮助

4

2 回答 2

11

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

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

就个人而言,我会在没有符号反转的情况下写这个,在测试中使用负数:

 if( [[newLocation timestamp] timeIntervalSinceNow] < -5.0 ) return;
于 2012-04-03T03:03:55.457 回答
3

这就是 NSDate 文档对 timeIntervalSinceNow 的评价:

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

在这种情况下,时间戳记录在过去,并且总是早于“现在”。另一方面,如果您使用 timeIntervalSince1970,结果将是肯定的。

于 2012-04-03T02:27:19.223 回答