我在方法didUpdateLocations中获得用户的经度和经度。如果允许位置,我调用一个接受纬度,经度参数并调用webservice的方法,否则我会显示一个UIAlertView。
问题是:iOS随机调用我的locationManager委托方法。所以我的网络服务被多次调用......我该如何解决?
当我呼叫该位置时,请确认是否允许...我在上一个屏幕中发出请求:
// GET LOCATION
self.initializeWaitingScreen()
if( CLLocationManager.authorizationStatus() == CLAuthorizationStatus.AuthorizedWhenInUse ||
CLLocationManager.authorizationStatus() == CLAuthorizationStatus.AuthorizedAlways){
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.startUpdatingLocation()
} else {
let loginFailAlert: UIAlertView = UIAlertView(title: "Localisation refusée", message: "Vos fonctionnalités sont restreintes, pour accéder à l'application complète, veuillez activer la localisation", delegate: self, cancelButtonTitle: "OK")
loginFailAlert.show()
self.initializeUIComponent()
self.initializeDataWithWebServiceWithoutLocation()
}
我的locationManager方法:
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
var lon = manager.location.coordinate.longitude.description
var lat = manager.location.coordinate.latitude.description
self.locationManager.stopUpdatingLocation()
self.initializeDataWithWebServiceWithLocation(lon, _lat: lat)
self.initializeUIComponent()
}
self.initializeDataWithWebServiceWithLocation(lon, _lat: lat)
取经度和纬度,并将其交给我调用webservices的方法。
答案 0 :(得分:7)
这是预期的行为。当CLLocationManager确定用户的位置时,将发送更新(我不仅仅意味着明显)。请参阅Apple's docs的摘录:
无论您使用哪种位置服务,都会通过位置管理器的关联委托对象向您的应用报告位置数据。由于返回初始位置可能需要几秒钟,因此位置管理器通常会立即提供先前缓存的位置数据,然后在可用时提供更多最新的位置数据。因此,在采取任何操作之前检查任何位置对象的时间戳总是一个好主意。如果同时启用两个位置服务,则它们使用同一组委托方法传递事件。
如果您需要对某些事件进行过滤,则需要(1)确保正确设置所需的准确度以帮助最小化事件数量,然后(2)执行任何特定的应用程序特定过滤。但要小心,因为您获得多次更新的原因是确定的位置已更改。如果你猜测系统,你可能会得到不准确的数据。
最后,评估您是否需要更改位置或进行重大位置更改。如果您不需要高粒度,请选择“重要”。