iOS应用程序在启动屏幕上崩溃,应用程序崩溃后请求位置(Xcode 8.3.3)

时间:2017-08-17 21:28:49

标签: ios xcode geolocation cllocationmanager rx-swift

当我将我的iOS应用程序从Xcode运行到iOS模拟器或我的物理设备时,应用程序会在几秒钟内崩溃。当应用程序进入后台并且我返回到iPhone主屏幕时,警报视图要求允许使用我的位置弹出但在我选择答案之前很快就会消失。

在声明并初始化一个名为" locationManager"的CLLocationManager之后,我相信错误是从这些语句中触发的:

    locationManager.requestWhenInUseAuthorization()
    locationManager.requestLocation()

控制台日志中出现的主要错误是:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Delegate must respond to locationManager:didFailWithError:'

我已使用" NSLocationWhenInUseUsageDescription"设置了我的使用说明,以便我的应用可以向用户显示他们的位置将用于什么,从而授予应用访问其位置的权限。还有什么我错过的可能导致此错误?

为了获得用户的位置,我只需要通过添加" NSLocationWhenInUseUsageDescription"来请求它。 Info.plist文件的关键,还是我需要采取更多措施?

1 个答案:

答案 0 :(得分:0)

解决您的问题:

创建一个类,并覆盖以下方法:

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
    }

}

在任何地方创建此类的全局实例。

let locationDelegate: LocationDelegate = LocationDelegate()

然后在你要求权限之前设置委托:

locationManager.delegate = locationDelegate