导致EXC_BAD_ACCESS的MKClusterAnnotation

时间:2018-01-10 12:03:30

标签: ios swift

Storyboard

我有一个带有两个视图控制器的导航控制器,其中一个带有MKMapView。 出口和代表已设置。

@IBOutlet weak var mapView: MKMapView!

override func viewDidLoad() {
    super.viewDidLoad()
    mapView.delegate = self
}

委托方法mapView(_:viewFor:)会返回可以群集的MKMarkerAnnotationView

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    let annotationView = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: "_")
    annotationView.clusteringIdentifier = "_"
    return annotationView
}

如果以下条件匹配,当从导航控制器弹出视图控制器时,Xcode会引发EXC_BAD_ACCESS。

  1. 地图上必须至少有一个MKClusterAnnotation
  2. 地图上必须至少选择一个注释。
  3. MKMapView

    在上述情况下,点击后退按钮或从左边缘轻扫会触发EXC_BAD_ACCESS。

    这可以通过在viewWillDisappear(_:)中取消选择任何选定的注释来避免,但我不确定这是否是理想的解决方案。

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        for annotation in mapView.selectedAnnotations {
            mapView.deselectAnnotation(annotation, animated: true)
        }
    }
    

    我想知道为什么会引发异常。

0 个答案:

没有答案