首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MKmapView.overlays返回nil - Crash

MKmapView.overlays返回nil - Crash
EN

Stack Overflow用户
提问于 2017-11-26 17:03:39
回答 2查看 493关注 0票数 1

Self.mapView.overlays返回nil而不是[],

这会导致系统崩溃。

崩溃函数:

代码语言:javascript
复制
fileprivate func addRadiusToUserLocation(userCoordinate: CLLocationCoordinate2D,radius : Double) {
    let radiusCircle = MKCircle(center: userCoordinate, radius: radius)
    self.mapView.removeOverlays(self.mapView.overlays)
    self.mapView.addOverlays([radiusCircle])
}

堆栈:

代码语言:javascript
复制
Fatal Exception: NSInvalidArgumentException
*** -[__NSSetM removeObject:]: object cannot be nil
0  CoreFoundation                 0x18307bd38 __exceptionPreprocess
1  libobjc.A.dylib                0x182590528 objc_exception_throw
2  CoreFoundation                 0x183014c44 _CFArgv
3  CoreFoundation                 0x182f46264 -[__NSCFString hash]
4  VectorKit                      0x193139ca8 -[VKRasterOverlayTileSource removeOverlay:]
5  VectorKit                      0x192dc74b8 -[VKMapModel removeRasterOverlay:]
6  MapKit                         0x19342b7f0 -[MKOverlayContainerView _removeDrawable:forOverlay:level:]
7  MapKit                         0x19342acd0 -[MKOverlayContainerView removeOverlay:]
8  MapKit                         0x19342adc8 -[MKOverlayContainerView removeOverlays:]
9                        0x10429bfd8 SiteMapManager.addRadiusToUserLocation(userCoordinate:radius:) (SiteMapManager.swift:156)
10                       0x10429d184 specialized SiteMapManager.addOrUpdateUserLocation(userLocation:radius:) (SiteMapManager.swift:48)
11                       0x10429f1cc specialized SiteMapManager.mapView(_:viewFor:) (SiteMapManager.swift:203)
12                       0x10429c164 @objc SiteMapManager.mapView(_:viewFor:) (SiteMapManager.swift)
13 MapKit                         0x1933e99e8 -[MKMapView annotationManager:representationForAnnotation:]
14 MapKit                         0x1933a7ba4 -[MKAnnotationManager _addRepresentationForAnnotation:]
15 MapKit                         0x1933a68f0 -[MKAnnotationManager updateVisibleAnnotations]
16 MapKit                         0x1933c1620 -[MKMapView _didChangeRegionMidstream:]
17 MapKit                         0x1933dddf0 -[MKMapView mapLayer:didChangeRegionAnimated:]
18 VectorKit                      0x192d90690 -[VKMapView map:didChangeRegionAnimated:]
19 VectorKit                      0x192d3fc74 -[VKMapCameraController rotateToYaw:withPoint:animated:]
20 VectorKit                      0x192df7d84 -[VKMapCameraController snapMapIfNecessary:]
21 MapKit                         0x19342b7f0 -[MKOverlayContainerView _removeDrawable:forOverlay:level:]
22 MapKit                         0x19342acd0 -[MKOverlayContainerView removeOverlay:]
23 MapKit                         0x19342adc8 -[MKOverlayContainerView removeOverlays:]
24                       0x10429bfd8 SiteMapManager.addRadiusToUserLocation(userCoordinate:radius:) (SiteMapManager.swift:156)

addRadiusToUserLocation调入:

代码语言:javascript
复制
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

mapView:

代码语言:javascript
复制
@IBOutlet var mapView: MKMapView!

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2019-04-25 02:08:58

这看起来像是线程问题。

我能够通过将addoverlay和removeoverlay移动到主线程来修复它。

代码语言:javascript
复制
fileprivate func addRadiusToUserLocation(userCoordinate: 
DispatchQueue.main.async {
   CLLocationCoordinate2D,radius : Double) {
   let radiusCircle = MKCircle(center: userCoordinate, radius: radius)
   self.mapView.removeOverlays(self.mapView.overlays)
   self.mapView.addOverlays([radiusCircle])
}

}

票数 1
EN

Stack Overflow用户

发布于 2017-11-26 17:20:57

在移除地图视图叠加之前,需要检查其是否为nil

代码语言:javascript
复制
fileprivate func addRadiusToUserLocation(userCoordinate: CLLocationCoordinate2D,radius : Double) {
    let radiusCircle = MKCircle(center: userCoordinate, radius: radius)
    if(self.mapView.overlays != nil){
         self.mapView.removeOverlays(self.mapView.overlays)
    }
    self.mapView.addOverlays([radiusCircle])
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47494524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档