29

我刚刚从 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 在用户点击相应导航控制器的后退按钮时被释放的视图中。公认的解决方案似乎很好地解释了为什么会发生此错误。

在建议的解决方案之前:

- (void)dealloc {
    [webView release];

    [super dealloc];
}

建议解决方案后:

- (void)dealloc {
    webView.delegate = nil;
    [webView stopLoading];
    [webView release];

    [super dealloc];
}
4

5 回答 5

66

场景是这样的:

  1. 用户使用 进入屏幕UIWebView。作为代表的UIViewController集合self
  2. 网页开始下载
  3. 用户退出屏幕
    3a。UIViewController被释放
  4. UIWebView完成加载并向其代表发送“我完成”消息...

在解除分配委托之前,您需要停止UIWebView加载其页面并将其委托设置为 nil。

于 2009-10-05T15:34:47.787 回答
4

您的代码几乎 100% 出错。iPhone SDK 中的错误非常罕见,并且UIWebView已经被许多其他开发人员测试得很好。

EXC_BAD_ACCESS通常在您尝试访问已发布的对象时发生。显然,如果 Apple 的代码试图这样做,那么您就是错误地释放对象的人。你确定你没有-autorelease-release太多?

于 2009-10-05T15:13:36.810 回答
1

我最近遇到了类似的问题,我的应用程序随机崩溃。原来问题在于onclick=在加载的 HTML 中使用“”。

onclick用简单的替换,<a href="javascript:some_script">问题就消失了。

希望这对遇到相同问题的其他人有所帮助webviews

于 2016-11-10T12:47:28.097 回答
0

我有一个类似的问题。我正在使用:

 [webView loadHTMLString:str baseURL:tmpUrl];

 [str release];

“str”的释放导致错误消息“EXC_BAD_ACCESS”

于 2009-12-28T18:12:25.987 回答
0

更仔细地查看代码中实现UIWebViewDelegate协议的内容。特别是您想查看正在处理的内容webViewDidFinishLoad: 您正在尝试访问已释放的变量。如果可以,请发布完整的来源,这将有助于我们为您找到它。

于 2009-10-05T15:21:25.297 回答