2012-04-03 32 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