Iphone 当我在加载网络视图时按下导航栏上的后退键时,我的应用程序崩溃了。。。?
我的iphone应用程序中有一个带有导航栏的视图。导航栏上有一个后退按钮,可以转到上一个视图。视图中有一个webview。如果用户按下导航栏上的“后退”按钮时正在加载webview,则应用程序将崩溃,并显示错误消息:Iphone 当我在加载网络视图时按下导航栏上的后退键时,我的应用程序崩溃了。。。?,iphone,uiwebview,loading,back,Iphone,Uiwebview,Loading,Back,我的iphone应用程序中有一个带有导航栏的视图。导航栏上有一个后退按钮,可以转到上一个视图。视图中有一个webview。如果用户按下导航栏上的“后退”按钮时正在加载webview,则应用程序将崩溃,并显示错误消息: [WebViewController respondsToSelector:]: message sent to deallocated instance 我假设我在视图卸载时发布了一些东西。我相信我的viewWillDisapear方法会阻止webview加载。。。但是,当我在
[WebViewController respondsToSelector:]: message sent to deallocated instance
我假设我在视图卸载时发布了一些东西。我相信我的viewWillDisapear方法会阻止webview加载。。。但是,当我在视图未完全加载时按back键时,它仍会崩溃
当我让视图在大约20%的时间内完成加载时,似乎会发生这种情况——并且只有在页面完成加载后,我真正快速地按下后退按钮时才会发生这种情况
以下是我相信在这场恶作剧中运行的代码
- (void)viewDidLoad {
[super viewDidLoad];
webView.scalesPageToFit = YES;
[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString: url]]];
[addressBar setText:url];
}
然后在加载webview时:
- (void)webViewDidStartLoad:(UIWebView *)webView {
if (first) {
//mtns is a uiimageview
mtns.alpha = .8;
first = NO;
}
[activityIndicator startAnimating];
}
在提出建议后,我添加了以下方法:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.webView stopLoading];
self.webView.delegate = nil;
}
我不知道它为什么会崩溃,所以我有点不知所措
谢谢
R您可以覆盖
-视图将消失:
以停止加载UIWebView并将委托设置为nil
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.webView stopLoading];
self.webView.delegate = nil;
}
这可能是因为您在ViewWillMissier应用程序中编写的执行代码尚未崩溃。请尝试放置断点并检查是否调用ViewWillMissier方法。如果未调用ViewWillMissier方法,请在应用程序导航到第二个视图控制器之前编写mark建议的代码 在web视图消失之前,必须确保将其委托属性设置为nil。在您的dealoc和viewDidUnload方法中都可以这样做,因为在dealoc之前并不总是调用viewDidUnload。发生的情况是,在解除分配视图控制器后,web视图仍然有对其地址的引用,并试图向其发送消息(-respondsToSelector:)
- (void)dealloc {
webView.delegate = nil;
[super dealloc];
}
- (void)viewDidUnload {
webView.delegate = nil;
[super viewDidUnload];
}