iphone - UIWebView 中的 EXC_BAD_ACCESS

标签 iphone uiwebview crash-reports

我刚刚从 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];
}

最佳答案

场景是这样的:

  1. 用户通过UIWebView进入屏幕。 UIViewControllerself 设置为委托(delegate)
  2. 网页开始下载
  3. 用户退出屏幕
    3a. UIViewController 被释放
  4. UIWebView 完成加载并向其委托(delegate)发送“我完成”消息...

在取消分配委托(delegate)之前,您需要阻止 UIWebView 加载其页面并将其委托(delegate)设置为 nil。

关于iphone - UIWebView 中的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1520674/

相关文章:

iphone - 如何获取(提取)iOS系统应用程序的图标,例如地址簿应用程序?

ios - 在 iOS 应用程序的 UIWebView 中捕获 POST 参数

objective-c - 如何通过错误代码识别 UIWebView 错误?

ios - Foundation -[NSConcreteMapTable 分配 :key:value:isNew:] Crashed: com. apple.main-thread EXC_BAD_ACCESS KERN_INVALID_ADDRESS at

ios - 分析 Xamarin.iOS 崩溃报告

ios - setRightButton 上的应用程序崩溃。不知道为什么

ios - 如何在 ios objective c 中过滤 Json 数据

ios - 一个将在锁定屏幕上显示紧急联系人的应用程序

iphone - FMDB EXC_BAD_ACCESS 插入数据库时

iphone - 在本地 UIWebView 中使用 Retina 图像