【问题标题】:When I press back on my UInavigation bar while a webview is loading, my app crashes...?当我在加载 web 视图时按回我的 UInavigation 栏时,我的应用程序崩溃了......?
【发布时间】:2011-08-17 21:56:52
【问题描述】:

我的 iPhone 应用中有一个带有导航栏的视图。导航栏上有一个后退按钮可以转到上一个视图。在视图中是一个 web 视图。如果在用户按下导航栏上的后退按钮时正在加载 webview,应用程序会崩溃并显示错误消息:

[WebViewController respondsToSelector:]: message sent to deallocated instance

我假设我在视图卸载时释放了一些东西。我相信我的 viewWillDisapear 方法负责阻止 webview 加载...但是,当我在视图未完全加载时按回时,它会崩溃。

当我让视图完成加载大约 20% 的时间时,似乎会发生这种情况 - 并且只有在页面完成加载后我真的很快按下后退按钮时才会发生。

这是我认为在这个 shinanigans 期间运行的代码......:

- (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

【问题讨论】:

    标签: iphone uiwebview loading back


    【解决方案1】:

    您可以覆盖 -viewWillDisappear: 以停止加载 UIWebView 并将委托设置为 nil。

    - (void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
        [self.webView stopLoading];
        self.webView.delegate = nil;
    }
    

    【讨论】:

      【解决方案2】:

      这可能是因为你在viewwillDisapper应用程序中编写的执行代码之前崩溃了。尝试下断点并检查viewwillDisapper方法是否被调用。如果它没有被调用,那么在应用程序之前编写标记建议的代码导航到第二个视图控制器。

      【讨论】:

        【解决方案3】:

        您必须确保在 Web 视图消失之前将其 delegate 属性设置为 nil。在你的 dealloc 和 viewDidUnload 方法中都这样做,因为 viewDidUnload 并不总是在 dealloc 之前调用。发生的情况是,在您的视图控制器被释放后,Web 视图仍然具有对其地址的引用,并试图向其发送消息 (-respondsToSelector:)。

        - (void)dealloc {
            webView.delegate = nil;
           [super dealloc];
        }
        
        - (void)viewDidUnload {
            webView.delegate = nil;
            [super viewDidUnload];
        }
        

        【讨论】:

          猜你喜欢
          • 2020-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-11
          • 2016-12-02
          相关资源
          最近更新 更多