Я только что загрузил отчеты о сбоях для одного из своих приложений для iPhone из iTunes Connect. Наиболее распространенный сбой имеет след, подобный следующему:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xa1b1c1db
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x3030e6f4 objc_msgSend + 16
1 UIKit 0x30ebebee -[UIWebView webView:resource:didFinishLoadingFromDataSource:]
2 UIKit 0x30ebe5ca -[UIWebViewWebViewDelegate webView:resource:didFinishLoadingFromDataSource:]
3 CoreFoundation 0x32b73b5c __invoking___ + 60
4 CoreFoundation 0x32bc67be -[NSInvocation invoke]
5 WebCore 0x320baa86 HandleDelegateSource
6 CoreFoundation 0x32bb8a96 CFRunLoopRunSpecific
7 CoreFoundation 0x32bb8356 CFRunLoopRunInMode
8 GraphicsServices 0x30544cd4 GSEventRunModal
9 GraphicsServices 0x30544d80 GSEventRun
10 UIKit 0x30d2c768 -[UIApplication _run]
11 UIKit 0x30d2b46c UIApplicationMain
Я примерно на 80% уверен, что это проблема внутри UIWebView и выходящая за рамки того, что я могу решить. Есть ли у кого-нибудь какие-либо предложения о том, как сузить эту проблему, чтобы определить, связана ли она с операционной системой и UIWebView, или проблема, которую я могу исправить и устранить в своем коде? Заранее спасибо.
ОБНОВЛЕНИЕ: рассматриваемый UIWebView находится в представлении, которое освобождается, когда пользователь нажимает кнопку возврата соответствующего контроллера навигации. Принятое решение, по-видимому, дает хорошее объяснение тому, почему возникает эта ошибка.
До предлагаемого решения:
- (void)dealloc {
[webView release];
[super dealloc];
}
После предложенного решения:
- (void)dealloc {
webView.delegate = nil;
[webView stopLoading];
[webView release];
[super dealloc];
}