每隔X分钟获取iPhone位置

时间:2013-03-25 16:15:40

标签: objective-c locationmanager

我不能通过主要的位置更改,因为它必须检查每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]);
}

2 个答案:

答案 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];
}