具有集群的 mapView(_:didAdd:) 中的 MapKit 运行时错误

Posted

技术标签:

【中文标题】具有集群的 mapView(_:didAdd:) 中的 MapKit 运行时错误【英文标题】:MapKit runtime error in mapView(_:didAdd:) with clustering 【发布时间】:2018-04-13 09:04:13 【问题描述】:

在实现MKMapViewDelegate 的方法mapView(_:didAdd:) 时出现意外错误。它从 Xcode 9.3 开始发生,而 Xcode 9.2 没有发生。使用集群时,使用views 数组时出现运行时错误。

func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) 
    if let view = views.first  // Fatal error: NSArray element failed to match the Swift Array Element type
        print(type(of: view))
    

据我了解,views 数组并不像预期的那样仅包含 MKAnnotationView 实例。这是 views 在崩溃时包含的内容。

我看到里面有一个MKClusterAnnotation 实例。如果这是真的,我会收到错误消息,但是为什么会发生这种情况?我做错了吗?

这很容易通过在WWDC 2017 - Session 237 What's New in MapKit 的示例上实现方法来重现。

【问题讨论】:

【参考方案1】:

我也遇到过同样的问题。如果你实现集群并提供一个 mapView(_:didAdd:) 方法,你会崩溃——这绝对是一个 Apply 框架的错误。该问题在 ios 11.3 中很容易重现,但幸运的是已在 iOS 11.4 中得到纠正。

【讨论】:

以上是关于具有集群的 mapView(_:didAdd:) 中的 MapKit 运行时错误的主要内容,如果未能解决你的问题,请参考以下文章

从 didAdd 锚点获取 ARAnchor 的旋转

是否可以在 ios 的 mapView 上集群 MKPolygon

在具有 backgroundColor 的 MapView 上方时,TouchableOpacity 不可点击

滚动 mapView 或点击标记时,如何创建具有自定义注释和区域焦点的地图?

实例方法'mapView(_:didFailToLocateUserWithError :)'几乎匹配可选要求

Kivy Mapview:区分按下的按钮