我的实时应用程序中最常见的崩溃之一是MKMapView崩溃。它在内部方法-[MKMapView mapTileViewDidFinishLoading:]
崩溃。在我的测试期间,我无法追溯崩溃,但在iTunes Connect的崩溃报告中非常频繁。今天有任何关于此次崩溃的经历吗?它只是一个非常简单的地图,只显示一个注释。
以下是此次崩溃的完整堆栈跟踪:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000009
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x339737d8 objc_msgSend + 16
1 MapKit 0x345709ec -[MKMapView mapTileViewDidFinishLoading:]
2 CoreFoundation 0x344492e4 -[NSObject(NSObject) performSelector:withObject:]
3 Foundation 0x3326981e __NSThreadPerformPerform
4 CoreFoundation 0x34460f1e __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
5 CoreFoundation 0x34432ba0 __CFRunLoopDoSources0
6 CoreFoundation 0x34432444 __CFRunLoopRun
7 CoreFoundation 0x34432270 CFRunLoopRunSpecific
8 CoreFoundation 0x34432178 CFRunLoopRunInMode
9 GraphicsServices 0x3026b5ec GSEventRunModal
10 GraphicsServices 0x3026b698 GSEventRun
11 UIKit 0x31ad011c -[UIApplication _run]
12 UIKit 0x31ace128 UIApplicationMain
13 MYApp 0x00002e08 main + 36
14 MYApp 0x00002dd8 start + 32
答案 0 :(得分:11)
我想我可能已在我自己的应用程序中解决了这个问题。 this post似乎有正确的解决方案和解释。
导致我的应用程序失败的消息是'mapViewDidFinishLoadingMap',它是MKMapViewDelegate的消息。尝试在view dealloc方法之前将mapView委托设置为'nil'。
答案 1 :(得分:2)
这样做就可以解决问题100%
-(void) viewWillDisappear:(BOOL)animated
{
self.mapView.delegate = nil;
mapView=Nil;
NSLog(@"viewWillDisappear");
}
答案 2 :(得分:0)
我还必须在viewDidDisappear中将委托设置为nil来解决问题。