我在使用 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 文件中:
我已经在设备和模拟器上尝试过,但都不起作用。事实上,如果我删除该应用程序并重新安装,它似乎不再请求位置授权。
我知道我错过了一些愚蠢的东西,但我无法弄清楚它到底是什么。
我非常感谢人们能够提供的任何帮助。
干杯, 杰拉德
最佳答案
安娜的回答:
CLLocationManager 文档说:“要配置和使用 CLLocationManager 对象来传递事件...创建 CLLocationManager 类的实例并将其强引用存储在应用程序中的某个位置。保持对位置管理器对象的强引用在涉及该对象的所有任务完成之前,这是必需的。由于大多数位置管理器任务都是异步运行的,因此将位置管理器存储在本地变量中是不够的。”
关于ios - CLLocationManager didUpdateLocations 未通过 plist 条目调用 iOS 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29846349/