我不能通过主要的位置更改,因为它必须检查每X分钟,无论它们是否已移动。
这就是我现在尝试这样做的方式。我正试图在另一个线程中运行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]);
}
答案 0 :(得分:2)
不要这样做......我的意思是睡眠部分。 “无论他们是否已经移动”部分,您可以手动处理。只是不要使用CLLocationManager事件来触发业务逻辑。保存位置,然后随时查看。如果它没有改变,那么你的逻辑没有任何改变,因为你无论如何都需要它。
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
self.location = newLocation;
}
您可以使用NSTimer每隔X分钟报告该属性上的内容。使用“主要更改”来节省电池
答案 1 :(得分: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];
}