Диспетчер местоположения не обновляется за пределами ViewController

Я знаю, что это было задано раньше, но проверка этих вопросов не решила мою проблему.

Мой 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 в очереди отправки, чтобы нацелить основную очередь или перезапустить устройство, но это не изменилось.

Есть идеи?


person Can    schedule 07.01.2016    source источник


Ответы (1)


Прежде всего, я не уверен, что это решение решит вашу проблему. Но просто попробуйте удалить инициализацию Location Manager в классах FooPath и ViewController и создать Location Manager constant в своем AppDelegate и получить этот locationManager от твой класс.

Вы можете создать locationManager в своем AppDelegate следующим образом;

let locationManager = CLLocationManager()

После этого вы можете использовать инициализированный locationManager в своем пользовательском классе.

private let locationManager = AppDelegate().locationManager

Просто попробуйте это и, пожалуйста, дайте мне знать, если это работает.

person emresancaktar    schedule 07.01.2016
comment
Да, кажется, это работает. Я также думал об AppDelegate, но не приближался к нему, так как это немного плохая практика. Хотя на данный момент у меня нет другого выхода. Спасибо, что указали мне правильное направление. Ценить это. - person Can; 07.01.2016
comment
Спасибо @emresancaktar, это действительно сработало. Я задавался вопросом с дня, почему он не работает. - person Veer; 16.04.2019