CLFloor returns 水平 2146959360?

CLFloor returns level 2146959360?

我正在使用 CLLocationManager, looking at the location property and examining the level of the floor,如果有的话。文档建议如果它不能确定 floor,它只会 return nil。实际上,我得到一个 CLFloor 实例,但它的 level 是 2146959360。将其转换为十六进制,0x7FF80000,这看起来很像一些神秘的标记值。

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 台设备)出现 return nil,正如预期的那样,模拟器也是如此。

怎么回事?

如果您调用 startUpdatingLocation. If you do that, then the floor property will be nil. This CLFloor instance with a level,此问题就会消失 2146959360 (0x7FF80000) 的值仅在您查询 CLLocationManagerlocation 而未先调用 startUpdatingLocation 时才会出现.

文档表明此 location 属性 填充了最后一个已知值。无论如何,floor 应该是 nil(至少对于我的特定位置)但不是。 level 无效。

请参阅 this repo 的错误表现示例和调用 startUpdatingLocation 工作原理的演示。

我已提交错误报告 (FB7638281)。