首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift:地图视图消失/重新出现后,MapView geocodeAddressString不起作用

Swift:地图视图消失/重新出现后,MapView geocodeAddressString不起作用
EN

Stack Overflow用户
提问于 2016-11-03 14:50:04
回答 1查看 318关注 0票数 0

我正在做一个像这样的项目。

有一个文本框/按钮,它接受邮政编码,并将邮政编码传递到地图视图控制器的段,该控制器在地图上显示邮政编码区域。整个设置都在导航控制器后面,这样我就可以返回并尝试上一个视图中的另一个邮政编码。

问题是,地图视图第一次正确地绘制了邮政编码,但是当我返回并在前面的视图控制器中输入另一个邮政编码时,地图视图并没有正确地将区域设置为新的邮政编码,而是在模拟器中显示了一个带有默认区域的新地图视图。请参阅以下代码

代码语言:javascript
运行
复制
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按钮(地图视图消失)时表现不会有什么不同,并根据我的输入使用另一个邮政编码设置再次显示该视图。

EN

回答 1

Stack Overflow用户

发布于 2016-11-03 16:18:56

发现了这个问题,它与视图消失/重新出现无关,而是与我进行的地理编码调用的数量有关。当我打印错误时,一切都很清楚- kCLErrorDomain error 2 after geocoding repeatedly with CLGeocoder

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40395412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档