我刚刚从 iTunes Connect 下载了我的一款 iPhone 应用程序的崩溃报告。最常见的崩溃有如下所示的痕迹:
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 位于一个 View 中,当用户点击相应导航 Controller 的后退按钮时,该 View 就会被释放。接受的解决方案似乎为发生此错误的原因提供了一个很好的解释。
在建议的解决方案之前:
- (void)dealloc {
[webView release];
[super dealloc];
}
建议解决方案后:
- (void)dealloc {
webView.delegate = nil;
[webView stopLoading];
[webView release];
[super dealloc];
}
最佳答案
场景是这样的:
- 用户通过
UIWebView
进入屏幕。UIViewController
将self
设置为委托(delegate) - 网页开始下载
- 用户退出屏幕
3a.UIViewController
被释放 UIWebView
完成加载并向其委托(delegate)发送“我完成”消息...
在取消分配委托(delegate)之前,您需要阻止 UIWebView
加载其页面并将其委托(delegate)设置为 nil。
关于iphone - UIWebView 中的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1520674/