所以我遇到了一个奇怪的错误 - "fatal error: unexpectedly found nil while unwrapping an Optional value"
...
这很奇怪,因为它只是在运行模拟器的 FIRST 时间内失败了。只要我不退出模拟器并重新运行应用程序,它就不会失败,并且会成功找到用户位置。如果我退出模拟器,然后尝试重新运行应用程序,它将失败并出现相同的错误。
为什么会这样?在它真正被发现之前,是否以某种方式快速检查某个位置?
提前致谢。
override func queryForTable() -> PFQuery! {
let query = PFQuery(className: "Yak")
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.delegate = self // ? delegate
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()
var userLocation:CLLocation = manager.location
currLocation = userLocation.coordinate // error occurs here
println(" my location is \([manager.location])")
if let queryLoc = currLocation {
println("ahahahaha")
query.whereKey("location", nearGeoPoint:PFGeoPoint(latitude: queryLoc.latitude as CLLocationDegrees!, longitude: queryLoc.longitude as CLLocationDegrees!), withinMiles: 10)
query.limit = 200
query.orderByDescending("createdAt")
}
答案 0 :(得分:0)
我的猜测是你试图使用线性过程检索来自异步服务的数据。
这一行意味着:
manager.startUpdatingLocation()
经理开始更新位置,但这并不意味着它何时返回已经获得的位置。这可能需要一些时间,也可能会失败。
阅读位置的正确位置在didUpdateLocations
的{{1}}方法中,我认为您已在视图控制器中设置。
第二次使用它的原因是因为在之前的运行中管理员确实有时间检测位置,所以你得到的是旧的,而不是最新的位置。
<强>更新强>
解决问题的一种可能方法是:
CLLocationManagerDelegate
中检查viewDidLoad
是否为零(它是一个隐式解包的可选项,因此您可以进行检查)userLocation.coordinate
,可能禁用用户输入,并将标志(实例属性)设置为true,以跟踪您的等待时间一个位置UIActivityIndicator
locationManager(_:didUpdateLocations:)