2013-03-25 99 views
0

我無法前往主要的位置更改,因爲無論他們是否移動了X分鐘,都必須進行檢查。每隔X分鐘獲取一次iPhone的位置

這就是我現在試圖做的。我正在嘗試在另一個線程中運行locationManager,並在該線程中休眠,問題在於它睡在前端,因此用戶無法點擊任何內容。 (當應用程序未運行時,這必須運行)

[locationManager performSelectorInBackground:@selector(startUpdatingLocation) withObject:nil]; 


- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ 
     [NSThread sleepForTimeInterval:10.0]; //600 
     NSLog([NSString stringWithFormat:@"Longitude: %0.3f", newLocation.coordinate.longitude]); 
     NSLog([NSString stringWithFormat:@"Latitude: %0.3f", newLocation.coordinate.latitude]); 
} 

回答

2

不要這樣做......我的意思是睡眠部分。 「無論他們移動了」部分,您可以手動處理。只是不要使用CLLocationManager事件觸發您的業務邏輯。保存位置,然後在需要時進行檢查。如果它沒有改變,那麼你的邏輯沒有任何變化,因爲你無論如何都需要它。

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    self.location = newLocation; 
} 

您可以使用NSTimer每隔X分鐘報告該屬性的任何內容。使用「重大變化」,以

1

節省電池而不是睡在NSThread的,你可以使用NSTimer

-(void)yourMethod{ 
    //your stuffs here 

    if (/*once you are done*/) { 
     [self.timer invalidate]; 
     self.timer=nil; 
    } 
} 

-(IBAction)button:(id)sender;{ 

    self.timer=[NSTimer scheduledTimerWithTimeInterval:600.f target:self selector:@selector(yourMethod) userInfo:nil repeats:YES]; 
}