崩溃的 MapKit

Crashing MapKit

我目前正在开发一个 MapKit 应用程序,它将自定义注释(位置)放在 MapKit MapView 上。但是,放置引脚时出现问题。图钉实际上显示在地图等上,但应用程序一直崩溃。所以我 运行 僵尸它给了我这个错误: An Objective-C message was sent to a deallocated 'MKMarkerAnnotationView' object (zombie) at address: 0x1030ef600 然后进一步指出我: specialised ViewController.mapView(_:viewfor:)

我相信负责它的代码是这样的:

extension ViewController {
    //Setting color of marker and enabling callouts
    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) - > MKAnnotationView ? {
        let annotationView = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: "pin")
        annotationView.canShowCallout = true
        annotationView.calloutOffset = CGPoint(x: -5, y: 5)

        //Add button for user to see more info about location
        annotationView.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)

        //Change marker color based on location
        if annotation is MKUserLocation {
            return nil
        } else {
            if annotation.subtitle! == "Excellent location" {
                annotationView.markerTintColor = UIColor.green
            } else {
                if annotation.subtitle! == "Good location" {
                    annotationView.markerTintColor = UIColor.orange
                } else {
                    if annotation.subtitle! == "Average location" {
                        annotationView.markerTintColor = UIColor.yellow
                    } else {
                        if annotation.subtitle! == "Neutral location" {
                            annotationView.markerTintColor = UIColor.red
                        } else {
                            annotationView.markerTintColor = UIColor.black
                        }
                    }
                }
            }
        }
        return annotationView
    }
}

不幸的是,我无法提取出此块的确切问题,也无法提取僵尸描述。这似乎是 MKMarkerAnnotationView.

的一个长期问题

//在建议的编辑之后,之前的问题似乎(经过广泛的测试运行)不受影响。但是现在由于另一个原因它崩溃了,即:An Objective-C message was sent to a deallocated 'MKMarkerAnnotationView' object (zombie) at address: 0x13c0bb800.**** 负责的调用者 0x104c9c903 和类别 MKMarkerAnnotationView 的指针 0x13c0bb800。不幸的是没有额外的描述。我真的不知道哪段代码现在失败了。当我点击注释图钉时发生崩溃。

也许你们中的任何人都可以向我指出 going/went 哪里错了?

所以过了一段时间,我重写了整段代码,发现我搞砸了 MKMarkerAnnotationView 和颜色的 if 语句。删除了那些,现在它完美地工作了。打算尝试将它与 switch 语句一起使用,但到目前为止它已经完全解决了这个问题。问题特此关闭。