位置管理器未在ViewController外部更新

时间:2016-01-07 08:47:18

标签: ios swift core-location heading

我知道以前曾被问过,但检查这些问题并没有解决我的问题。

我的ViewControllerCoreLocation打交道,并拥有自己的位置管理员。它工作正常,得到的位置。

ViewController调用另一个名为FootPath的类,该类也需要它自己的位置管理器。

我知道位置管理器的单例方法,但是现在我必须进行大量的重构,所以它不是一个选项。

FootPath的init方法:

init(motionManager: CMMotionManager, expectedNavigationPattern: [StepDirection]) {
    self.expectedNavigationPattern = expectedNavigationPattern
    self.motionManager = motionManager

    super.init()

    self.locationManager = CLLocationManager()
    self.locationManager.delegate = self
    self.locationManager.requestAlwaysAuthorization()
    self.locationManager.distanceFilter = 1
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
    self.locationManager.startUpdatingHeading()
}

FootPath创建了自己的位置管理器。我可以看到它在调试时分配。但标题没有更新。

Footpath也符合CLLocationManagerDelegate

这曾经工作,我检查了备份,它正在更新标题。虽然我找不到差异。我通过FileMerge查找了一下。

我还尝试在调度队列中分配FootPath类位置管理器以定位主队列或重新启动设备,但它没有改变。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

首先,我不确定此解决方案将解决您的问题。但只是尝试在 FooPath ViewController 类中删除您的位置管理器初始化,并为您的 AppDelegate 创建位置管理器constant,从你的班级得到这个locationManager

您可以像这样在 AppDelegate 中创建locationManager;

let locationManager = CLLocationManager()

之后,您可以在自定义类中使用已初始化的locationManager。

private let locationManager = AppDelegate().locationManager

试试这个,请告诉我它是否有效。