一尘不染

在Swift中实现CLLocationManagerDelegate方法

swift

我一直在尝试使它工作一段时间,而我来这里询问-如何在Swift中使用CLLocationManagerDelegate方法?我把它放在班上的第一位:

var locationManager = CLLocationManager()

我在我的viewDidLoad方法中添加了以下内容:

locationManager.delegate = self
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()

而且我尝试使用这些委托方法无济于事:

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: AnyObject[]!) {
    locationReceived = true
}

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
    locationReceived = false
}

我也尝试过在函数前面使用@optional,但是Xcode会引发编译器错误。有任何想法吗?


阅读 512

收藏
2020-07-07

共1个答案

一尘不染

如果尚未添加,则需要将NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription键添加到您的plist中,因为它们现在是必需的,


iOS8 +要求将这两个字符串之一设置为使用位置。您使用哪一种取决于您打算如何询问位置。

  • 使用NSLocationAlwaysUsageDescription对于要使用的设备的位置,即使应用没有打开并正在使用的应用程序。

  • 使用NSLocationWhenInUseUsageDescription对于要使用的设备的位置,只有当应用程序是开放的,在使用中的应用程序。

注意:
添加字符串时,在构建和运行之前,请先从设备上删除该应用,然后进行全新安装。看来,如果该应用在升级到iOS8之前被授权使用位置,它不会再次征求您的许可,也不会看到您设置了这些字符串。进行删除和全新安装即可解决此问题。

设置两个字符串中的任何一个都会提示安装/首次使用时出现以下弹出窗口:“即使不使用该应用程序,也允许“ ThisApp”访问您的位置”

这里有一个 截图 中的 的plist 文件。

在此处输入图片说明

2020-07-07