我正在使用CLGeocoder reverseGeocodeLocation。运行约5-10分钟(没有明显的模式)后出现崩溃,并随机崩溃。这是我的代码:

    if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse {

        let currentLatCoord = manager.location?.coordinate.latitude
        let currentLongCoord = manager.location?.coordinate.longitude

        CLGeocoder().reverseGeocodeLocation(CLLocation(latitude: currentLatCoord!, longitude: currentLongCoord!)) { (placemarks, error) -> Void in

            if error != nil {
                print(error)
                return
            }

            let placeArray = placemarks as [CLPlacemark]!
            var placeMark: CLPlacemark

            placeMark = placeArray![0]

            self.locationLabel.text = String(placeMark.addressDictionary?["Thoroughfare"]!)
        }
    }

另外,为了帮助您,这是行和错误的图片:

ios - CLGeocoder错误EXC_BAD_INSTRUCTION-LMLPHP

最佳答案

我认为您需要一些可选的绑定:

if let thoroughfare = placeMark.addressDictionary?["Thoroughfare"] as? String {
    self.locationLabel.text = thoroughfare
}

我猜测地址字典中可能没有"Thoroughfare"密钥,而您正在为nil的指定初始化程序提供String值。

CLGeocoder完成反向地理编码后,是否有可能在代码段中未更新视图(显示在屏幕上)?如果将插座定义为隐式解包的可选:
@IBOutlet var locationLabel : UILabel!
我想知道它是否已经设置为nil,但是由于爆炸(!),编译器无法检查您。

但是,当然,如果崩溃时视图仍在屏幕上,则可能不是问题。

关于ios - CLGeocoder错误EXC_BAD_INSTRUCTION,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32981938/

10-12 00:33