Ошибка вызова Swift Custom Map

Я работал с пользовательскими выносками карт раньше и заставил их работать. Жаль, что это не те ситуации, потому что я пытался выяснить, почему я продолжаю получать эту ошибку: "Не удалось привести значение типа" NSKVONotifying_MKPointAnnotation "(0x1c0115960) к" ShopPeer.CustomBusinessPoint "(0x101159c68)". Я получаю эту ошибку в строке "let customAnnotation = view.annotation as! CustomBusinessPoint". Я использую этот учебник в качестве примера: http://sweettutos.com/2016/03/16/how-to-completely-customise-your-map-annotations-callout-views/... Кроме того, проверьте в компилятор на картинке ниже, чтобы увидеть, сколько просмотров появляется... не уверен, почему их так много.

 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    guard !(annotation is MKUserLocation) else { return nil }
    let reuseId = "pin"
    if let pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as? CustomBusinessCallOutAnnotatiion {
        return pinView
    } else {
        let  pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        pinView.pinTintColor = UIColor.red
        pinView.canShowCallout = false
        //pinView.rightCalloutAccessoryView = UIButton(type: UIButtonType.infoLight)

        return pinView
    }
}

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

    if view.annotation is MKUserLocation { return }

    let customAnnotation = view.annotation as! CustomBusinessPoint
    let views = Bundle.main.loadNibNamed("CustomBusinessCallOut", owner: nil, options: nil)
    let calloutView = views?[0] as! CustomBusinessCallOut


    calloutView.businessName.text = customAnnotation.businessName


    calloutView.center = CGPoint(x: view.bounds.size.width / 2, y: -calloutView.bounds.size.height * -0.0001)
    view.addSubview(calloutView)
    mapView.setCenter((view.annotation?.coordinate)!, animated: true)
}

1 ответ

Ошибка очевидна, вы что-то не согласовали с типом. Например, представление не является пользовательским или вы не переопределяете .annotation поле в вашем пользовательском классе. Вы должны искать свой класс, чтобы убедиться, что представление является вашим суперклассом. Отладка, является ли представление пользовательским. Наконец, прочитайте комментарии под статьей, которую вы читаете - будет больше людей, которые будут возможными сторонниками в вашем конкретном вопросе.

Другие вопросы по тегам