【发布时间】:2013-11-23 03:38:04
【问题描述】:
当应用程序移至后台时,我正在尝试跟踪用户的位置。我只需要跟踪一次。所以,我没有使用后台定位服务。在下面的代码中,这在我取消注释 1 时有效,但在我取消注释 2 时无效。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
// 1 works here [self startStandardUpdates];
self.bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask:self.bgTask];
self.bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
// 2 doesn't work here [self startStandardUpdates];
});
}
在第二种情况下,不调用此委托函数。
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
NSLog(@"Updated\n%@",locations);
[self.manager stopUpdatingLocation];
[[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
self.bgTask = UIBackgroundTaskInvalid;
}
谁能告诉我为什么这在第二种情况下不起作用。另外,在第一个位置使用[self startStandardUpdates]可以吗?
【问题讨论】:
-
您能发布
startStandardUpdates方法的作用吗? -
@initWithQuestion 对不起,我很久以前就问过这个问题了。我无权访问代码...感谢您的关注
标签: ios location cllocationmanager background-process