我的导航控制器堆栈中有一个带有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
答案 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。