didUpdateLocations 未被调用 swift 3
didUpdateLocations not getting called swift 3
我正在开发一个需要使用计时器每 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()
In 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)
}
但是没有调用。
我很想知道为什么没有更新位置以及为什么地图没有显示位置。请帮忙
确保分配代理人:
self.locationManager.delegate = self
我也没有为我工作,发现你设置委托的位置会影响这一点。
例如这没有用:
var locationManager = CLLocationManager() {
didSet {
locationManager.delegate = self
}
}
稍后设置它确实按预期工作。不知道为什么说实话,但也许这对某人有帮助。
我正在开发一个需要使用计时器每 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()
In 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)
}
但是没有调用。
我很想知道为什么没有更新位置以及为什么地图没有显示位置。请帮忙
确保分配代理人:
self.locationManager.delegate = self
我也没有为我工作,发现你设置委托的位置会影响这一点。
例如这没有用:
var locationManager = CLLocationManager() {
didSet {
locationManager.delegate = self
}
}
稍后设置它确实按预期工作。不知道为什么说实话,但也许这对某人有帮助。