【发布时间】:2014-12-03 13:03:52
【问题描述】:
我正在尝试从地图中删除叠加层。
func removeMapOverlay() {
var removeOverlays : [AnyObject]! = self.mapView.overlays
// Above line throws runtime exception
self.mapView.removeOverlays(removeOverlays)
}
self.mapView.overlays 是 AnyObject 数组的类型。 var overlays: [AnyObject]! { get }。
所以一开始我是这么写的
var removeOverlays = self.mapView.overlays
它在运行时在这一行抛出EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 异常。
所以我为[AnyObject] 进行了类型转换,我不知道它是否正确,但它在运行时仍然给我同样的异常。
编辑:
我为 Objective C 代码所做的是:
- (void) removeMapOverlay {
[self.mapView removeOverlays:[self.mapView overlays]];
NSMutableArray *tempArray = [NSMutableArray arrayWithArray:[self.mapView annotations]];
if ([tempArray containsObject:[MKUserLocation class]]) {
[tempArray removeObject:[MKUserLocation class]];
}
NSArray *annotationArray = [NSArray arrayWithArray:tempArray];
tempArray = nil;
[self.mapView removeAnnotations:annotationArray];
}
我尝试在 Swift 中创建类似的方法。但它会引发我上面解释的异常。
【问题讨论】:
-
确保
self.mapView不是nil。 -
@Anna
mapview是一个IBOutlet,它不是零。
标签: ios swift mkmapview mkoverlay