CLFloor возвращает уровень 2146959360? - PullRequest
1 голос
/ 24 марта 2020

Я использую CLLocationManager, просматривая свойство location и исследуя level из floor , если есть. Документация предполагает, что если он не может определить floor, он просто вернет nil. На практике я получаю экземпляр CLFloor, но его level равен 2146959360. Преобразование его в шестнадцатеричное значение 0x7FF80000, которое выглядит подозрительно как некоторое значение crypti c часового.

lazy var locationManager: CLLocationManager = {
    let locationManager = CLLocationManager()
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    return locationManager
}()

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    switch CLLocationManager.authorizationStatus() {
    case .notDetermined: locationManager.requestWhenInUseAuthorization()
    case .denied:        redirectToSettings()
    default:             break
    }
}

@IBAction func didTapGetLocation(_ sender: Any) {
    updateLabels(for: locationManager.location)
}

func updateLabels(for location: CLLocation?) {
    guard let location = location else {
        floorLabel.text = "No location."
        return
    }

    if let floor = location.floor {
        let hexString = "0x" + String(format: "%08x", floor.level)
        floorLabel.text = "\(floor.level) (\(hexString))"
    } else {
        floorLabel.text = "No floor."
    }
}

Я наблюдаю такое поведение только на физических iOS 13.3.1 устройствах. FWIW, более старые версии iOS (у меня здесь есть только устройство iOS 10), как и ожидалось, возвращают nil, как и симулятор.

Что происходит?

1 Ответ

2 голосов
/ 24 марта 2020

Эта проблема исчезнет, ​​если вы позвоните startUpdatingLocation. Если вы это сделаете, то свойство floor будет nil. Этот экземпляр CLFloor со значением level 2146959360 (0x7FF80000) появляется только в том случае, если вы запрашиваете location из CLLocationManager без предварительного вызова startUpdatingLocation.

Документация предполагает, что это свойство location заполняется последним известным значением. В любом случае, floor должно быть nil (по крайней мере, для моего конкретного местоположения), но это не так. level недействительно.

См. в этом репо для примера проявления ошибки и демонстрации того, как работает вызов startUpdatingLocation.

enter image description here

Я отправил отчет об ошибке (FB7638281).

...