webViewDidFinishLoad异常

时间:2010-04-10 21:02:32

标签: iphone exception uiwebview

我的导航控制器堆栈中有一个带有webView的屏幕,当我在该页面完全加载之前从该视图导航回到之前的版本时,我得到一个EXCEPTION_BAD_ACCESS。似乎在webViewDidFinishLoad函数之前发布了webView的视图。我的问题是如何克服这个问题?我不希望用户等到页面加载......代码非常简单:

- (void) viewWillAppear:(BOOL)animated

{

[super viewWillAppear:animated];

NSURL *url = [NSURL URLWithString:storeUrl];

//URL Requst Object
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

//Load the request in the UIWebView.
[browser loadRequest:requestObj];

}

TIA

1 个答案:

答案 0 :(得分:1)

我猜你将browser.delegate属性设置为自定义UIViewController。当您点击后退按钮时,此控制器将从导航堆栈弹出并解除锁定,让您的browser.delegate指向释放的内存。当您的页面完成加载时,UIWebView会在其委托上调用一个不再存在的方法,因此您将获得EXC_BAD_ACCESS。

要防止这样的错误,每次设置对象的委托属性时,请确保在dealloc中将该属性设置为nil,如下所示:

- (void)dealloc {
    self.browser.delegate = nil; // Prevents EXC_BAD_ACCESS
    self.browser = nil; // releases if @property (retain)
    [super dealloc];
}

由于nil无声地吞下它收到的任何消息,这将阻止你的EXC_BAD_ACCESS。