0

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

2 回答 2

2

不要那样做......我的意思是睡眠部分。您可以手动处理“无论他们是否已移动”部分。只是不要使用 CLLocationManager 事件来触发您的业务逻辑。保存位置,然后随时查看。如果它没有改变,那么你的逻辑没有任何改变,因为无论如何你都需要它。

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

您可以使用 NSTimer 每 X 分钟报告一次该属性上的任何内容。使用“重大更改”来节省电池

于 2013-03-25T16:19:36.080 回答
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];
}
于 2013-03-25T16:23:12.647 回答