7

以下是我从客户端发送的崩溃日志中复制/粘贴的内容。我无法理解这是什么意思:s当NavigationController弹出时,应用程序崩溃!

显然它看起来像应用程序导航回到前一个屏幕时崩溃(这就是客户端报告)。什么是UIWebDocumentView这里?

我需要解决崩溃,但我卡在这里,所以任何帮助,高度赞赏。

P.S.我使用的是iPhone SDK 3.0。

Date/Time:  2009-09-29 18:16:28.458 -0400 
OS Version:  iPhone OS 3.0 (7A341) 
Report Version: 104 

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: KERN_INVALID_ADDRESS at 0xbbadbeef 
Crashed Thread: 4 

    Thread 4 Crashed: 

     0 WebCore       0x3588dd74 __ZL17_WebTryThreadLockb + 288 
     1 WebCore       0x3588e4c0 __ZL18_WebThreadAutoLockv + 52 
     2 UIKit       0x30aea484 -[UIWebDocumentView _responderForBecomeFirstResponder] + 8 
     3 UIKit       0x30978b34 -[UINavigationTransitionView transition:fromView:toView:] + 200 
     4 UIKit       0x30978a54 -[UINavigationTransitionView transition:toView:] + 24 
     5 UIKit       0x30974470 -[UINavigationController _startTransition:fromViewController:toViewController:] + 1604 
     6 UIKit       0x30973d90 -[UINavigationController _startDeferredTransitionIfNeeded] + 256 
     7 UIKit       0x309a7468 -[UINavigationController _popViewControllerWithTransition:allowPoppingLast:] + 400 
     8 UIKit       0x309a72c8 -[UINavigationController popViewControllerAnimated:] + 32 
     9 Snocell       0x0002ae00 0x1000 + 171520 
     10 Foundation      0x30554062 -[NSThread main] + 42 
     11 Foundation      0x305023f2 __NSThread__main__ + 852 
     12 libSystem.B.dylib    0x31d705a0 _pthread_body + 20 
+1

好吧,我想我找到了解决方案。如果有人下降到这里,共享它: EXC_BAD_ACCESS(SIGSEGV)KERN_INVALID_ADDRESS表示您正在引用的虚拟地址不在页表中,或者您无权访问。这是您不允许访问的虚拟地址。对于您的示例地址0x67696c69,很可能这不是一个被视为指针的指针;或者包含指针的数据结构已经释放并被其他数据覆盖。 而且,当时我看到的WebCore在日志中,在iPhone WebKit的一个组成部分(http://bit.ly/4j4WsN) – 2009-10-05 11:02:38

+1

所以,我在这里做什么,在一个UIWebView,它可以完全加载之前dispalying一个网站,弹出回到先前的视图控制器并且它被破坏。 我发现UIWebView需要在释放它之前清除它的委托;否则,如果一个Web请求在您释放UIWebView后完成,它将尝试回调委托并导致应用程序崩溃。 解决方案:我添加了“myWebView.delegate = nil;”之前弹出视图控制器,它现在的工作:) – 2009-10-05 11:05:32

+1

我有一个类似的问题 - webView.delegate =零解决它,就像你。 – 2011-05-27 22:11:34

回答

15

好吧,我想我找到了解决方案。在其他人遇到相同情况时共享它:

EXC_BAD_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS意味着您正在引用的虚拟地址不在页表中,或者您无权访问。这是您不允许访问的虚拟地址。对于您的示例地址0x67696c69,很可能这不是一个被视为指针的指针;或者包含指针的数据结构已经释放并被其他数据覆盖。

而且,当时我看到的WebCore在堆栈跟踪日志中(WebCore的是iPhone WebKit的一个组成部分 - http://en.wikipedia.org/wiki/WebKit#Components

所以,我在这里做什么,在一个UIWebView和前dispalying网站可以完全加载,回弹到之前的视图控制器,并且它可以被破坏

我发现UIWebView需要在释放它之前清除它的委托;否则,如果一个Web请求在您释放UIWebView后完成,它将尝试回调委托并导致应用程序崩溃。

SOLUTION:我下面的代码添加弹出视图控制器之前,它的工作现在:)

if (webView.loading) 
    [webView stopLoading]; 
webView.delegate = nil; 
+0

此修复程序对我无效(虽然我正在测试一个老人iPhone 2G)。我只是删除了popViewController调用。不是最聪明的解决方案,但它确实有效,在某些方面它更合乎逻辑。 – 2012-03-15 18:46:35

+0

原来,删除popViewController语句也修复了其他问题。我认为最好不要在didFailLoadWithError方法中调用popViewController。 – 2012-03-15 18:59:17

+0

谢谢,有助于搞清楚给我正确的方向,看看 – 2cupsOfTech 2013-05-02 08:50:03

0

我认为有以下将是一个正确的做法。首先将代表设置为零。

webView.delegate = nil; 
if (webView.loading) 
    [webView stopLoading]; 
相关问题