首页 文章

CLLocationManager didUpdateLocations未使用plist条目调用iOS 8

提问于
浏览
2

我在使用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

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

我知道我错过了一些愚蠢的东西,但我无法锻炼到底是什么 .

我很感激人们可以提供任何帮助 .

干杯,杰勒德

2 回答

  • 1

    安娜回答:

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

  • 4

    除了接受的答案,如果您使用的是模拟器 . 您必须选择应用程序正在运行的位置 after (Apple-总部的Debug-> Location-> apple) . 我设置了位置,并假设下次运行应用程序 didUpdateLocations 将使用之前设置的内容调用,但这种假设是错误的 .

相关问题