ios - CLLocationManager didUpdateLocations 未通过 plist 条目调用 iOS 8

标签 ios swift core-location

我在使用 CLLocationManager 时遇到一些问题。该代码曾经在 iOS 8.2 上运行,但自从升级到 8.3 后就不起作用了。以下是设置启动时调用的位置管理器的代码。

let distanceThreshold:CLLocationDistance = 100.0

var currentLocation:CLLocationCoordinate2D?

override init() {
    assert(locMan == nil)
    super.init()
    locMan = self

    let locationManager = CLLocationManager()
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
    locationManager.requestAlwaysAuthorization()
    locationManager.requestWhenInUseAuthorization()
    locationManager.startUpdatingLocation()
}

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    currentLocation = manager.location.coordinate

    if UIApplication.sharedApplication().applicationState == .Background {
        PlacesManager.fetchNearbyPlaces(LocationManager.getLocationManager().currentLocation!, radius: distanceThreshold, callback: placesCallback)
    }
}

使用此代码,尽管之前已调用过 didUpdateLocations,但从未调用过它。 我已将相关条目添加到 Info.plist 文件中: Info.plist screenshot

我已经在设备和模拟器上尝试过,但都不起作用。事实上,如果我删除该应用程序并重新安装,它似乎不再请求位置授权。

我知道我错过了一些愚蠢的东西,但我无法弄清楚它到底是什么。

我非常感谢人们能够提供的任何帮助。

干杯, 杰拉德

最佳答案

安娜的回答:

CLLocationManager 文档说:“要配置和使用 CLLocationManager 对象来传递事件...创建 CLLocationManager 类的实例并将其强引用存储在应用程序中的某个位置。保持对位置管理器对象的强引用在涉及该对象的所有任务完成之前,这是必需的。由于大多数位置管理器任务都是异步运行的,因此将位置管理器存储在本地变量中是不够的。”

关于ios - CLLocationManager didUpdateLocations 未通过 plist 条目调用 iOS 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29846349/

相关文章:

ios - 将 XCode 从 7.1.1 更新到 7.2 会导致警告和构建错误

ios - 用于类消息的 Objective-C 宏

swift - 在真实设备 iOS Swift 上进行单元测试时尝试生成随 secret 钥对时出错

ios - Swift:作为参数传递的字典始终为空

c# - await CLGeocoder.GeocodeAddressAsync 从不返回

ios - CLLocation 管理器使用默认位置而不更新实际位置

iphone - 指针和引用

ios - UITableView contentSize 未更新

swift - Firebase Realtime DB - 从数组获取特定数据?

ios - 在应用程序处于后台时启动 CLLocationManager 位置更新