我正在做一个像这样的项目。
有一个文本框/按钮,它接受邮政编码,并将邮政编码传递到地图视图控制器的段,该控制器在地图上显示邮政编码区域。整个设置都在导航控制器后面,这样我就可以返回并尝试上一个视图中的另一个邮政编码。
问题是,地图视图第一次正确地绘制了邮政编码,但是当我返回并在前面的视图控制器中输入另一个邮政编码时,地图视图并没有正确地将区域设置为新的邮政编码,而是在模拟器中显示了一个带有默认区域的新地图视图。请参阅以下代码
class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet var mapView: MKMapView!
var searchZipCode:String! = "95110" //used by other segues to set zipcode to show on this page
let locationManager = CLLocationManager()
let geocoder = CLGeocoder()
var dispatchGroup = dispatch_group_create()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
self.mapView.showsUserLocation = true
dispatchGroup = dispatch_group_create()
dispatch_group_enter(dispatchGroup)
self.plotZipCodeInMap(self.searchZipCode)
dispatch_group_notify(dispatchGroup, dispatch_get_main_queue()){
print("Zip code plotted.")
}
func plotZipCodeInMap(zipCode:String) {
geocoder.geocodeAddressString(zipCode, completionHandler: {(placemarks, error) -> Void in
print("Zip code = \(zipCode)")
if let placemark = placemarks?.first {
print("Successfully decoded the zip code..")
let coordinate = placemark.location?.coordinate
let center = CLLocationCoordinate2D(latitude: coordinate!.latitude, longitude: coordinate!.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.04, longitudeDelta: 0.04))
self.mapView.setRegion(region, animated: true)
dispatch_group_leave(self.dispatchGroup)
}
})
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("Location updated..")
let locations = locations.last
let center = CLLocationCoordinate2D(latitude: locations!.coordinate.latitude, longitude: locations!.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.075, longitudeDelta: 0.075))
self.mapView.setRegion(region, animated: true)
self.locationManager.stopUpdatingLocation()
}}
问题是,当我返回到导航控制器中的第一个视图并输入另一个邮政编码时,地图视图似乎正确地进入了plotZipCodeInMap方法,但随后它没有打印该行
“已成功解码邮政编码..”
这意味着在第二次获取地标时会有一些麻烦。不确定这里的问题可能是什么。这些变量都是本地变量,我希望它们在单击back按钮(地图视图消失)时表现不会有什么不同,并根据我的输入使用另一个邮政编码设置再次显示该视图。
发布于 2016-11-03 16:18:56
发现了这个问题,它与视图消失/重新出现无关,而是与我进行的地理编码调用的数量有关。当我打印错误时,一切都很清楚- kCLErrorDomain error 2 after geocoding repeatedly with CLGeocoder
https://stackoverflow.com/questions/40395412
复制相似问题