【问题标题】:requestLocation() in iOS 9 calls the didUpdateLocation delegate multiple timesiOS 9 中的 requestLocation() 多次调用 didUpdateLocation 委托
【发布时间】:2016-04-11 07:15:03
【问题描述】:

所以在 iOS9 上有了新的requestLocation() 方法。我试图用它来只更新一个位置,但它会多次点击didUpdateLocations

这不是假设只调用一次吗?我已将distanceFilter 设置为 1000.0,因此帮助快速返回非常广泛。有任何想法吗 ?

即使我在委托方法中调用stopUpdatingLocation(),我仍然会得到委托的三个命中。

注意:当我改用StartUpdatingLocation 时会发生相同的行为,我只想要一次返回,因为我想获取用户当前的国家/地区,因此将位置提供给 reversegeocoder

提前致谢

代码如下:

func getLocationOneTime(accuracy: Double){
    print("Acquiring location one time - accuracy requested:\(accuracy)")
    locationManager.distanceFilter = accuracy
    locationManager.desiredAccuracy = accuracy
    // Start gpsOneTimeTimeout timer
    gpsTimeoutTimer = NSTimer.scheduledTimerWithTimeInterval(gpsOneTimeTimeout, target: self, selector: #selector(self.reportTimeout), userInfo: nil, repeats: false)
    locationManager.requestLocation()
     }

【问题讨论】:

  • 你在代码的什么地方调用了这个方法?
  • @Jess 更新了上面的代码
  • 我看到了同样的现象。我认为它是一个错误。它与缓存有关(您可以通过查看所获取位置的时间戳来了解这一点)。

标签: swift ios9 cllocationmanager


【解决方案1】:

通常对于此类问题,我只使用 if 语句来防止委托函数在第一次调用后更改任何内容

在这种情况下,如果您只是在寻找我会做的位置:

let locationManager = CLLocationManager()
var userLocation: CLLocation!

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if userLocation == nil {
        if let location = locations.first {
            userLocation = location
            self.locationManager.stopUpdatingLocation()
        }
    } 
}

编辑:我查看了苹果的文档,你做对了,我怀疑你能否通过任何合理的方式阻止它。

【讨论】:

    猜你喜欢
    • 2016-05-07
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多