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
}
...
}
使用此功能时:
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
}
...
}