didUpdateHeading没有在swift中调用

时间:2016-03-07 01:13:06

标签: swift ios9 cllocationmanager

我正在尝试获取设备的标题信息,以便使用磁性和真实航向之间的差异来确定用户位置的偏差。为此,我有一个Helper类和我的MainVc(mvc)。在我的助手类init方法中,我执行以下操作:

spring.cloud.stream.binder.kafka.start-offset

正在调用didUpdateLocations,我正在成功获取设备的坐标。然而,虽然我已经添加了didUpdateHeading,但它的第一行没有打印,设备卡在那一点:

...
...
locationManager = CLLocationManager()
switch CLLocationManager.authorizationStatus() {
  case .AuthorizedAlways:
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    locationManager.startUpdatingLocation()
  case .NotDetermined:
    locationManager.requestAlwaysAuthorization()
  case .AuthorizedWhenInUse, .Restricted, .Denied:
    mvc.alertDenied();
}

if (!initialized)
{
  initialized = true;
  self.performSelector("finishUpdatingLocation", withObject: nil, afterDelay: 2.0);
}

}

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    print ("didUpdateLocations")
    var userLocation:CLLocation = locations[0] as! CLLocation
    longitude = Float(userLocation.coordinate.longitude);
    latitude = Float(userLocation.coordinate.latitude);
  }


 func finishUpdatingLocation () {
    locationManager.stopUpdatingLocation();
    NSObject.cancelPreviousPerformRequestsWithTarget(self, selector: "finishUpdatingLocation", object: nil);
    mvc.goingToUpdateHeading();
    locationManager.startUpdatingHeading();
}

为什么没有调用startUpdatingHeading的想法?

2 个答案:

答案 0 :(得分:2)

您必须致电locationManager.startUpdatingHeading()

...
...
locationManager = CLLocationManager()
switch CLLocationManager.authorizationStatus() {
  case .AuthorizedAlways:
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    locationManager.startUpdatingLocation()
    locationManager.startUpdatingHeading()
  case .NotDetermined:
    locationManager.requestAlwaysAuthorization()
  case .AuthorizedWhenInUse, .Restricted, .Denied:
    mvc.alertDenied();
}

答案 1 :(得分:0)

如果您正在模拟器上进行检查,则它将无法正常工作,请在真实设备上进行检查。