我知道以前曾被问过,但检查这些问题并没有解决我的问题。
我的ViewController
与CoreLocation
打交道,并拥有自己的位置管理员。它工作正常,得到的位置。
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类位置管理器以定位主队列或重新启动设备,但它没有改变。
有什么想法吗?
答案 0 :(得分:2)
首先,我不确定此解决方案将解决您的问题。但只是尝试在 FooPath 和 ViewController 类中删除您的位置管理器初始化,并为您的 AppDelegate 创建位置管理器constant
,从你的班级得到这个locationManager
。
您可以像这样在 AppDelegate 中创建locationManager;
let locationManager = CLLocationManager()
之后,您可以在自定义类中使用已初始化的locationManager。
private let locationManager = AppDelegate().locationManager
试试这个,请告诉我它是否有效。