вычисление timeIntervalSinceNow с отрицательным значением (пример CLLocation)? - PullRequest
4 голосов
/ 03 апреля 2012

Я не понимаю этот пример из документа: метод 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;

Спасибо за вашу помощь

Ответы [ 2 ]

9 голосов
/ 03 апреля 2012

Если результат вызова timeIntervalSinceNow отрицательный (это означает, что временная метка была в прошлом (что, в данном случае, всегда будет)), он будет преобразован в положительное число. Например, -2.5 станет +2.5 (и наоборот).

Затем вы проверяете значение инвертированного знака, чтобы увидеть, не превышает ли оно 5,0 - в этом случае это означает, что отметка времени была более пяти секунд назад. Если это так, вы ничего не делаете с данными о местоположении, потому что они слишком стары, чтобы быть полезными.

Лично я написал бы это без инверсии знака, используя отрицательное число в тесте:

 if( [[newLocation timestamp] timeIntervalSinceNow] < -5.0 ) return;
3 голосов
/ 03 апреля 2012

Это то, что NSDate документация должна сказать о timeIntervalSinceNow:

Интервал между получателем и текущей датой и временем.Если получатель раньше текущей даты и времени, возвращаемое значение будет отрицательным.

В этом случае отметка времени была записана в прошлом, и она всегда будет раньше, чем «сейчас».С другой стороны, если вы используете timeIntervalSince1970, результат будет положительным.

...