didUpdateUserLocation未在具有后台更新的视图中触发

时间:2014-12-14 18:49:10

标签: ios objective-c mkmapview mapkit

我有一个使用后台位置更新的应用,它需要不断跟踪设备位置,无论应用是在前台还是后台。我在app delegate中设置了后台跟踪功能。

在前端我有一个带有工作mapkit视图的UIViewController所有CCLocationManager代码触发器没有错误但是在自定义UIViewController类中永远不会触发didUpdateUserLocation。

背景位置跟踪绝对没有问题。

以下是我在viewDidLoad中使用的代码

[self.mapView setShowsUserLocation:YES];
[self.mapView setShowsPointsOfInterest:YES];

self.locationManager = [[CLLocationManager alloc] init];
[self.locationManager requestWhenInUseAuthorization];

self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;

self.locationManager.distanceFilter = kCLDistanceFilterNone;
[self.locationManager setDelegate:self];

if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
    [self.locationManager requestWhenInUseAuthorization];
}

NSString *error;
if (![CLLocationManager locationServicesEnabled]) {error = @"Error message";}

CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if (status == kCLAuthorizationStatusRestricted || status == kCLAuthorizationStatusDenied) {error = @"Error message";}

if (error) {NSLog(error);}
else
{
    status = [CLLocationManager authorizationStatus];

    self.locationManager.pausesLocationUpdatesAutomatically = NO;
    self.locationManager.activityType = CLActivityTypeAutomotiveNavigation;

    [self.locationManager stopMonitoringSignificantLocationChanges];
    [self.locationManager startUpdatingLocation];
}

任何帮助将不胜感激 感谢

3 个答案:

答案 0 :(得分:0)

您需要查看以下详细信息:

  1. 在模拟器上进行测试?必须在真实设备上测试didUpdateLocations。

  2. 确保您指定了NSLocationAlwaysUsageDescription字符串,否则应用程序将不会显示授权消息,您将无权获得授权。

  3. 您是否实现了locationManager:didFailWithError:?你有没有错误?

  4. 您是否实现了locationManager:didChangeAuthorizationStatus:?您是否通过成功的授权状态进行了此调用?

答案 1 :(得分:0)

我终于解决了这个问题。

即使您正在使用Schema和Xcode中的位置内容,您仍然需要通过Debug>在模拟器中设置它。位置

希望这有助于其他人。

答案 2 :(得分:0)

现在,对于iOS 9,任何更新都需要包含以下内容;

if ([ locationManager respondsToSelector:@selector(requestWhenInUseAuthorization  )])
    {
     locationManager.allowsBackgroundLocationUpdates = YES;

    }

其他背景更新将受到损害。