iOS 应用程序在启动屏幕上崩溃,应用程序崩溃后请求位置(Xcode 8.3.3)
iOS app crashes on launch screen, location is requested after app crashes (Xcode 8.3.3)
当我 运行 我的 iOS 应用程序从 Xcode 到 iOS 模拟器或我的物理设备时,该应用程序会在几秒钟内崩溃。当应用程序随后进入后台并且我返回到 iPhone 主屏幕时,请求使用我的位置的权限的警报视图弹出,但在我可以 select 回答之前迅速消失。
在声明并初始化一个名为 "locationManager" 的 CLLocationManager 之后,我相信错误是由这些语句触发的:
locationManager.requestWhenInUseAuthorization()
locationManager.requestLocation()
控制台日志中出现的主要错误是:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Delegate must respond to locationManager:didFailWithError:'
我已经使用 "NSLocationWhenInUseUsageDescription" 设置了我的使用说明,这样我的应用程序就可以向用户展示他们的位置将用于什么,从而授予该应用程序访问其位置的权限。我还缺少其他可能导致此错误的内容吗?
为了获取用户的位置,我只需要通过在Info.plist文件中添加"NSLocationWhenInUseUsageDescription"键来请求它,还是我需要采取更多措施?
解决您的问题:
创建一个class like,并覆盖如下方法:
class LocationDelegate : NSObject, CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
// here you will receive your location updates on `locations` parameter
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
// if something goes wrong comes to here
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
// here you can monitor the authorization status changes
}
}
在任意位置创建此 class 的全局实例。
let locationDelegate: LocationDelegate = LocationDelegate()
然后在您请求许可之前设置委托:
locationManager.delegate = locationDelegate
当我 运行 我的 iOS 应用程序从 Xcode 到 iOS 模拟器或我的物理设备时,该应用程序会在几秒钟内崩溃。当应用程序随后进入后台并且我返回到 iPhone 主屏幕时,请求使用我的位置的权限的警报视图弹出,但在我可以 select 回答之前迅速消失。
在声明并初始化一个名为 "locationManager" 的 CLLocationManager 之后,我相信错误是由这些语句触发的:
locationManager.requestWhenInUseAuthorization()
locationManager.requestLocation()
控制台日志中出现的主要错误是:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Delegate must respond to locationManager:didFailWithError:'
我已经使用 "NSLocationWhenInUseUsageDescription" 设置了我的使用说明,这样我的应用程序就可以向用户展示他们的位置将用于什么,从而授予该应用程序访问其位置的权限。我还缺少其他可能导致此错误的内容吗?
为了获取用户的位置,我只需要通过在Info.plist文件中添加"NSLocationWhenInUseUsageDescription"键来请求它,还是我需要采取更多措施?
解决您的问题:
创建一个class like,并覆盖如下方法:
class LocationDelegate : NSObject, CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
// here you will receive your location updates on `locations` parameter
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
// if something goes wrong comes to here
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
// here you can monitor the authorization status changes
}
}
在任意位置创建此 class 的全局实例。
let locationDelegate: LocationDelegate = LocationDelegate()
然后在您请求许可之前设置委托:
locationManager.delegate = locationDelegate