Swift CLLocationManager(didUpdateLocations) 调用过于频繁
Swift CLLocationManager(didUpdateLocations) is called too often
谁能解释一下,为什么我立即停止更新,但委托方法'CLLocationManager(didUpdateLocations)'被调用了4次?我只需要一次当前位置:)
import UIKit
import MapKit
class ContactView: UIViewController, CLLocationManagerDelegate {
let clLocationManager = CLLocationManager()
var latitude: AnyObject = 0.000000
var longitude: AnyObject = 0.000000
override func viewDidLoad() {
super.viewDidLoad()
self.nameTextField.delegate = self
clLocationManager.delegate = self
clLocationManager.desiredAccuracy = kCLLocationAccuracyBest
clLocationManager.requestWhenInUseAuthorization()
clLocationManager.startUpdatingLocation()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {
(placemarks, error) -> Void in
self.clLocationManager.stopUpdatingLocation()
if placemarks!.count > 0 {
self.latitude = (manager.location?.coordinate.latitude)!
self.longitude = (manager.location?.coordinate.longitude)!
print(self.latitude)
print(self.longitude)
} else {
print("Error")
}
})
}
}
谢谢!
尝试将 stopUpdatingLocation 从 reverseGeocodeLocation 移到外面
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
manager.stopUpdatingLocation()
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {
(placemarks, error) -> Void in
if placemarks!.count > 0 {
self.latitude = (manager.location?.coordinate.latitude)!
self.longitude = (manager.location?.coordinate.longitude)!
print(self.latitude)
print(self.longitude)
} else {
print("Error")
}
})
}
}
您需要像下面这样更改您的代码:
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
manager.stopUpdatingLocation()
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {
(placemarks, error) -> Void in
if placemarks!.count > 0 {
self.latitude = (manager.location?.coordinate.latitude)!
self.longitude = (manager.location?.coordinate.longitude)!
print(self.latitude)
print(self.longitude)
} else {
print("Error")
}
})
}
您看到这个问题是因为您在继续更新您的位置,而对您的位置进行反向地理编码的调用仍在发生。
谁能解释一下,为什么我立即停止更新,但委托方法'CLLocationManager(didUpdateLocations)'被调用了4次?我只需要一次当前位置:)
import UIKit
import MapKit
class ContactView: UIViewController, CLLocationManagerDelegate {
let clLocationManager = CLLocationManager()
var latitude: AnyObject = 0.000000
var longitude: AnyObject = 0.000000
override func viewDidLoad() {
super.viewDidLoad()
self.nameTextField.delegate = self
clLocationManager.delegate = self
clLocationManager.desiredAccuracy = kCLLocationAccuracyBest
clLocationManager.requestWhenInUseAuthorization()
clLocationManager.startUpdatingLocation()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {
(placemarks, error) -> Void in
self.clLocationManager.stopUpdatingLocation()
if placemarks!.count > 0 {
self.latitude = (manager.location?.coordinate.latitude)!
self.longitude = (manager.location?.coordinate.longitude)!
print(self.latitude)
print(self.longitude)
} else {
print("Error")
}
})
}
}
谢谢!
尝试将 stopUpdatingLocation 从 reverseGeocodeLocation 移到外面
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
manager.stopUpdatingLocation()
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {
(placemarks, error) -> Void in
if placemarks!.count > 0 {
self.latitude = (manager.location?.coordinate.latitude)!
self.longitude = (manager.location?.coordinate.longitude)!
print(self.latitude)
print(self.longitude)
} else {
print("Error")
}
})
}
}
您需要像下面这样更改您的代码:
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
manager.stopUpdatingLocation()
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {
(placemarks, error) -> Void in
if placemarks!.count > 0 {
self.latitude = (manager.location?.coordinate.latitude)!
self.longitude = (manager.location?.coordinate.longitude)!
print(self.latitude)
print(self.longitude)
} else {
print("Error")
}
})
}
您看到这个问题是因为您在继续更新您的位置,而对您的位置进行反向地理编码的调用仍在发生。