Error: Could not cast value of type NSKVONotifying_MKUserLocation to Park_View.AttractionAnnotation

Error: Could not cast value of type NSKVONotifying_MKUserLocation to Park_View.AttractionAnnotation

使用此功能时:

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
    let annotationView = AttractionAnnotationView(annotation: annotation, reuseIdentifier: "Attraction")
    annotationView.canShowCallout = true
    return annotationView
}

发生此错误:

Could not cast value of type 'NSKVONotifying_MKUserLocation' (0x7e8a62b0) to 'Park_View.AttractionAnnotation' (0xf7948).

它运行良好,但是当我尝试添加 CoreLocation 以在我的代码中查找用户位置时,我开始遇到此错误。

可能是函数 AttractionAnnotationView returns MKUserLocation 对象而不是 AttractionAnnotation 对象。

我发现 MKUserLocation 也是一个注释。

这是我提出的解决方案,它解决了错误。

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
    if (annotation is MKUserLocation) {
        return nil
    }
    else {
        let annotationView = AttractionAnnotationView(annotation: annotation, reuseIdentifier: "Attraction")
        annotationView.canShowCallout = true
        return annotationView
    }
}

您的 AttractionAnnotation class 中是否有自定义覆盖的 isEqual() 函数?如果是这样,请检查它是否在比较之前将比较对象(函数参数)转换为 AttractionAnnotation。

在 Xcode 10.2 中,当您 click/tap 在用户位置上时,同样的事情发生了......所以尝试这样的事情:

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {

    if (view.annotation is MKUserLocation) {
        return
    }
    ...
}