当我在- (void)viewDidLoad
NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png";
self.onlineOverlay = [[MKTileOverlay alloc] initWithURLTemplate:template];
self.onlineOverlay.canReplaceMapContent = YES;
[_mapView addOverlay:self.onlineOverlay level:MKOverlayLevelAboveLabels];
日志是:(启用僵尸对象)
*** -[VKRasterOverlayTileSource invalidateRect:level:]: message sent to deallocated instance 0xf1863e0
只有在我过早关闭包含地图视图的视图控制器时才会发生这种情况。 如果我等待几秒钟它就不会崩溃。 视图控制器通过从导航控制器弹出来解除,
我尝试了几种方法:
mapView
&在mapView.delegate
nil
设置为- (void) dealloc and in - (void)viewDidDisappear
BOOL finishedLoading
在视图加载时设置为FALSE
,并在调用地图视图委托方法TRUE
时设置为- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
。- (void)mapView:(MKMapView *)mapView didAddOverlayRenderers:(NSArray *)renderers
。如何检查叠加层是否已完全添加?
或者,如果视图控制器被解除,是否可以取消叠加?
修改
视图控制器位于导航控制器堆栈中,并显示和弹出。
我自己没有使用任何线程。从乐器我可以看到还有另一个线程,所以我的猜测是addOverlay:
正在某个地方创建一个线程。
mapView是viewController的一个属性,也是委托。
答案 0 :(得分:1)
在tileOverlay子类中设置指向mapView的指针。这样,当调用结果块时,mapView仍然存在。您必须在tileOverlay子类中手动添加mapView属性。
NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png";
self.onlineOverlay = [[MKTileOverlay alloc] initWithURLTemplate:template];
self.onlineOverlay.canReplaceMapContent = YES;
self.onlineOverlay.mapView = _mapView;
[_mapView addOverlay:self.onlineOverlay level:MKOverlayLevelAboveLabels];