didUpdateLocations没有被称为swift 3

时间:2017-06-11 16:19:06

标签: ios swift swift3 cllocationmanager

我正在开发一个需要使用计时器每10分钟更新一次位置的屏幕。除此之外,它只需要在第一次加载时以及当视图再次出现在用户时更新位置。一旦用户转到另一个视图,它应该停止监视。

我有一个应该执行此操作的代码,但问题是任何时候都不会调用didUpdateLocations方法。此外,地图不显示当前位置(我使用模拟位置)。

我已正确设置权限,并且在设置为仅显示位置时应用程序正常运行。我需要这样做以减少电池消耗。

以下是我的相关代码:

viewDidLoad

if #available(iOS 8.0, *) {
            self.locationManager.requestAlwaysAuthorization()
        }
        self.locationManager.allowsBackgroundLocationUpdates = true
        self.locationManager.distanceFilter = 1000
        self.locationManager.activityType = CLActivityType.automotiveNavigation
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
        self.locationManager.pausesLocationUpdatesAutomatically = false
        self.locationManager.startUpdatingLocation()
self.map.showsUserLocation = true

viewWillAppear

self.map.showsUserLocation = true
        self.locationManager.startUpdatingLocation()

viewWillDisappear

self.map.showsUserLocation = false
            self.locationManager.stopUpdatingLocation()

didUpdateLocations(在最后一行)

self.locationManager.stopUpdatingLocation()

计时器功能:(这被称为罚款)

Timer.scheduledTimer(timeInterval: 600.0, target: self, selector: #selector(HomePageViewController.updateLocationFromTimer), userInfo: nil, repeats: true)

   @objc func updateLocationFromTimer()
    {
        self.locationManager.startUpdatingLocation()
    }

我还尝试使用以下代码捕获任何错误:

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print(error.localizedDescription)
    }

但它没有被召唤。

我很想知道为什么地点没有更新以及为什么地图没有显示位置。请帮忙。

2 个答案:

答案 0 :(得分:2)

确保指定代理人:

self.locationManager.delegate = self

答案 1 :(得分:0)

我也没有为我工作,并发现你设置代表的地方会对此产生影响。

E.g。这不起作用:

  var locationManager = CLLocationManager() {
        didSet {
            locationManager.delegate = self
        }
    }

稍后设置它确实按预期工作。不确定为什么说实话,但也许这对某人有帮助。