实现这一目标的最佳途径是什么?我有一个函数,用于获取给定经度/纬度的reverseGeocode,它工作得很好。但是,由于它在获得地址信息时是异步的,所以我已经执行了将地址提交到数据库的行。我需要completionHandle的completionHandler还是有其他的方式。我确实尝试了一个do/while循环(不要笑),但这没有效果。
func reverseGeocode() -> Bool {
let geoCoder = CLGeocoder()
let newLocation = CLLocation(latitude: valueLatitude, longitude: valueLongitude)
geoCoder.reverseGeocodeLocation(newLocation, completionHandler: {(placemarks: [AnyObject]!, error: NSError!) in
if error != nil {
println("LocationsMenu - Geocode failed with error: \(error.localizedDescription)")
}
if placemarks.count > 0 {
let myplacemark = placemarks[0] as! CLPlacemark
let addressDictionary = myplacemark.addressDictionary
let address = addressDictionary[kABPersonAddressStreetKey] as! NSString
let city = addressDictionary[kABPersonAddressCityKey] as! NSString
let state = addressDictionary[kABPersonAddressStateKey] as! NSString
let postcode = addressDictionary[kABPersonAddressZIPKey] as! NSString
let country = addressDictionary[kABPersonAddressCountryKey] as! NSString
println("\(address) \(city) \(state) \(postcode) \(country)")
}
self.showMap(placemarks[0] as! CLPlacemark)
})
}发布于 2015-06-30 17:51:38
只需将提交placemark信息的代码移动到完成处理程序中的数据库。如果该代码是在reverseGeocode方法之外调用的,则可以重构reverseGeocode以将块作为参数。然后在完成块内调用该块(大概在if placemarks.count > 0 if块中)。
https://stackoverflow.com/questions/31144720
复制相似问题