2014-02-25 165 views
1

我正在構建一個GPS應用程序,並且我已經能夠成功獲取位置更新。但是,這些更新正在快速實現(〜1-2秒)。我希望能夠每15秒更新一次UILabel。我的代碼有什麼問題?每15秒更新位置

P.S. [self setLabels:manager];簡單地設置UILabels管理者屬性的值:

manager.location.coordinate.latitude & longitude:manager.location.coordinate.longitude

謝謝!

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
CLLocation* location = [locations lastObject]; 
NSDate* eventDate = location.timestamp; 
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow]; 

if (abs(howRecent) < 15.0) { 
    //SHOULD BE LOOPING INTO HERE EVERY 15 SECONDS. INSTEAD IT IS 1-2 SECONDS 
    [self setLabels:manager]; 
    } 
} 
+1

CLLocationManager不允許安排。將'locationManager.distanceFilter'設置爲20米等值。 – beryllium

回答

2

創建像伊娃:

@property (nonatomic, strong) NSDate *lastUpdatedTime; 

然後,只需檢查lastUpdatedTime超過15秒前(或零首次)和每一個你設置的標籤時更新的日期。

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    if([self.lastUpdatedTime timeIntervalSinceNow] > 15 || self.lastUpdatedTime == nil){ 
     [self setLabels:manager]; 
     self.lastUpdatedTime = [NSDate date]; 
    } 
} 

這樣你就可以保持GPS更新他們是如何工作的。但每15秒只更新一次標籤。

2

那是因爲1小於15,你的代碼應該是

if (abs(howRecent) >= 15.0) { 
    //SHOULD BE LOOPING INTO HERE EVERY 15 SECONDS. INSTEAD IT IS 1-2 SECONDS 
    [self setLabels:manager]; 
} 
+2

對於當前的代碼,if語句永遠不會成立。 howRecent將永遠是非常小的。 Roland Keesom是對的。 – user3071962

3

GPS是不是你可以安排,這意味着當你開始監控的位置,你會得到很多位置更新,因爲的GPS信號越來越好。

特別是在一開始,您想要更新,然後每隔15秒更新一次,因爲您正在獲得更好的GPS修正。

您應該重新考慮您的代碼並可能比較位置結果以確定是否需要更新標籤。

+0

謝謝!你似乎必須知道你在說什麼。我對此很新,你能提供一個你的意思嗎?謝謝 – Teddy13

+0

if語句錯誤。獲取位置和顯示位置是不同的問題。 GPS將繼續更新,並以當前代碼的背景獲得更準確的結果。 – user3071962

+0

@ user3071962,是的,這是真的。但我只是在解決其他問題。 – rckoenes

-1

每15其次,它調用後臺模式,並獲取數據

double delayInSeconds = 15.0; 
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
dispatch_after(delayTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), 
^(void){ 
    //your code here 
});