【问题标题】:EXC_BAD_ACCESS in UIWebViewUIWebView 中的 EXC_BAD_ACCESS
【发布时间】:2009-10-05 15:07:38
【问题描述】:

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

【问题讨论】:

    标签: iphone uiwebview crash-reports


    【解决方案1】:

    场景是这样的:

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

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

    【讨论】:

    • 我会把钱放在一个被释放的代表身上。
    【解决方案2】:

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

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

    【讨论】:

    【解决方案3】:

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

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

    希望这可以帮助遇到webviews 相同问题的其他人。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我遇到了类似的问题。我正在使用:

         [webView loadHTMLString:str baseURL:tmpUrl];
        
         [str release];
        

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

        【讨论】:

          猜你喜欢
          • 2010-11-18
          • 1970-01-01
          • 2011-06-29
          • 2012-12-03
          • 2016-04-25
          • 1970-01-01
          • 2011-09-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多