iphone – UIWebView EXC_BAD_ACCESS崩溃

我遇到了使用UIWebView的应用程序崩溃。通常是当页面没有完全加载和UIWebView发送stopLoading选择器。或者当UIWebView完全加载页面。我有EXC_BAD_ACCESS。堆栈看起来像这样:

#0  0x95bb7688 in objc_msgSend
#1  0x30a671db in -[UIWebView webView:decidePolicyForNavigationAction:request:frame:decisionListener:]
#2  0x3024a10d in __invoking___
#3  0x30249ff8 in -[NSInvocation invoke]
#4  0x358ab160 in HandleDelegateSource
#5  0x302452c1 in CFRunLoopRunSpecific
#6  0x30244628 in CFRunLoopRunInMode
#7  0x32044c31 in GSEventRunModal
#8  0x32044cf6 in GSEventRun
#9  0x309021ee in UIApplicationMain
#10 0x0000239c in main at main.m:13

对我来说最奇怪的是webView:decisionPolicyForNavigationAction:request:frame:decisionListener:selector发送到UIWebView,因为在UIWebView文档中没有这样的选择器!只为可可(不可可触)WebView。
我怀疑UIWebView或它的委托有什么问题。但我不能设置断点来观看他们。请告诉我在这种情况下如何获得更多的信息。

您必须停止加载webView并删除委托,然后离开视图:

// ARC (correct solution)
- (void)dealloc {
    [_webView setDelegate:nil];
    [_webView stopLoading];
}

// non ARC
- (void)dealloc {
    [webView setDelegate:nil];
    [webView stopLoading];
    [webView release];
    [super dealloc];
}

// ARC (older solution)
- (void)viewWillUnload {
    [webView setDelegate:nil];
    [webView stopLoading];
}

什么苹果文档说:
重要在发布您已设置代理的UIWebView实例之前,必须首先将其delegate属性设置为nil。这可以做,例如,在dealloc方法。

http://stackoverflow.com/questions/1264727/uiwebview-exc-bad-access-crash

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:iphone – UIWebView EXC_BAD_ACCESS崩溃