我在使用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文件中:
我在设备和模拟器上都尝试过它,但都不起作用 . 事实上,如果我删除应用程序并重新安装,它似乎不再需要位置授权 .
我知道我错过了一些愚蠢的东西,但我无法锻炼到底是什么 .
我很感激人们可以提供任何帮助 .
干杯,杰勒德
2 回答
安娜回答:
CLLocationManager文档说:“配置和使用CLLocationManager对象来传递事件...创建CLLocationManager类的实例并在应用程序的某个位置存储对它的强引用 . 需要保留对位置管理器对象的强引用,直到涉及该对象的所有任务都已完成 . 由于大多数位置管理器任务以异步方式运行,因此将位置管理器存储在本地变量中是不够的 . “
除了接受的答案,如果您使用的是模拟器 . 您必须选择应用程序正在运行的位置 after (Apple-总部的Debug-> Location-> apple) . 我设置了位置,并假设下次运行应用程序
didUpdateLocations
将使用之前设置的内容调用,但这种假设是错误的 .