Ios CLFloor返回级别2146959360?
我正在使用,查看属性并检查属性(如果有的话)。文档表明,如果无法确定Ios CLFloor返回级别2146959360?,ios,iphone,mapkit,cllocation,Ios,Iphone,Mapkit,Cllocation,我正在使用,查看属性并检查属性(如果有的话)。文档表明,如果无法确定下限,它将返回nil。实际上,我得到了一个CLFloor实例,但它的级别是2146959360。将其转换为十六进制,0x7FF80000,看起来很像某种神秘的哨兵值 lazy var locationManager: CLLocationManager = { let locationManager = CLLocationManager() locationManager.delegate = self
下限
,它将返回nil
。实际上,我得到了一个CLFloor
实例,但它的级别是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设备)会像预期的那样返回nil
,模拟器也是如此
发生什么事了?如果你打电话,这个问题就会消失。如果这样做,则属性将为nil
。此clloor
实例的值为2146959360(0x7FF80000),仅当您在未调用startUpdatingLocation
的情况下查询CLLocationManager
的位置时才会出现
文档表明此位置
属性使用最后一个已知值填充。无论如何,floor
应该是nil
(至少对于我的特定位置而言),但不是。级别
无效
请参见错误显示示例和调用startUpdatingLocation
工作原理的演示
我已经提交了一份错误报告(FB7638281)。我同意这与文档相反,但其价值并不令人惊讶。这是NSNotFound。它是否在32位平台上运行(手表)?NSNotFound现在是NSIntegerMax(10.6之前,它始终是0x7fff…,但从10.6开始,它只是一个最大整数)不,在iphonex上只有ios13.3.1(和xsmax),使用Xcode 11.3.1(11C504)。并且该值是0x7ff80000,而不是0x7fffffff。但我想他们从哪里得到这个值并不重要,因为这两种方法都不对。这很奇怪,虽然。在13.4中仍然存在。英雄联盟