2011-06-02 82 views
0

更多iPhone編程的書,作者做:CLLocation,獲得新的位置

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
     if ([newLocation.timestamp timeIntervalSince1970] < [NSDate timeIntervalSinceReferenceDate] - 60) 
     locationCoordinate = newLocation.coordinate; 
return; 
    ... 

爲了確保數據被送往在最後一分鐘。兩個問題:

1)if語句在做什麼。看起來就像在左邊一樣,這個方法觸發和1970年日期之間的時間差異在幾秒鐘內。然後在右側,您會看到2001年的日期與現在減去60秒之間的差異。所以對我來說,if語句永遠不會有效,因爲左邊的數據總是會有更多的秒數。還是我理解錯了?

2)void函數返回的是什麼?這在這裏被認爲是好的編碼嗎?謝謝。

回答

0

我不知道是怎麼回事就在這裏,它的混亂聲明做,我有使用這樣的

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ 
     NSDate* eventDate = newLocation.timestamp; 
     NSTimeInterval howRecent = [eventDate timeIntervalSinceNow]; 
     if(abs(howRecent) > 1.0) 
       return; 
     ////process your event here 
} 

這是正確的,把回報空隙的方法,因爲我不想要在某些條件下執行語句..相同的代碼可以寫成

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ 
     NSDate* eventDate = newLocation.timestamp; 
     NSTimeInterval howRecent = [eventDate timeIntervalSinceNow]; 
     if(abs(howRecent) < 1.0){ 
       ///process your event 
       } 
} 

它只是取決於您的需要。

0

爲if塊:

timeIntervalSinceReferenceDate的價值迴歸可能是負的。請參閱說明。

如果接收者早於 參考日期,則該值爲負值。

所以如果條件可能是錯誤的。

對於return語句。

如果您希望您的功能在到達功能閉合支架之前將某個控制返回到調用功能條件。見例如。

-(void) SomeFunction 
{ 

    if(Condition1) 
    { 
     return; 
    } 

}