【问题标题】:Setting a delegate makes app crash设置委托会使应用程序崩溃
【发布时间】:2016-12-13 16:02:17
【问题描述】:

我实例化了一个 WebViewController 以模态方式呈现它(其中包含一个 webView 的 UIViewController)并尝试将当前类设置为其 webView 的委托,但这会导致应用程序崩溃。

let webVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "WebViewController") as! WebViewController
                        UIApplication.topViewController()?.present(webVC, animated: true, completion: {
                            webVC.webView.load(data, mimeType: response.mimeType!, textEncodingName: response.textEncodingName!, baseURL: response.url!)
                            webVC.webView.delegate = self
                        })

我尝试删除“vc.webView.delegate = self”部分,页面加载正常。有什么想法会导致这里出现问题吗?

【问题讨论】:

  • 显示委托方法的实现。
  • 当你崩溃时,堆栈跟踪是什么样的?
  • @shallowThought 现在是空的,所以我认为不是原因
  • @PhillipMills 已添加到问题中
  • 您发布的代码是否在您的演示文稿UIViewController 中?发布更多代码以查看上下文。

标签: swift webview uiwebview


【解决方案1】:

崩溃是说当UIWebView 尝试向委托发送消息时,委托不再存在。这是objc_msgSend 的正常原因。 (或者你调用了一个不存在的方法……但这对于可选方法来说不太可能。)

确保在 self 超出范围之前删除委托,或者在需要处理重定向时保留委托对象。

【讨论】:

  • 感谢您的解释!
【解决方案2】:

addSubView 后,webVC 的视图被保留,webVC 被释放(因为它是一个局部变量) 你应该将 webVC 声明为全局变量,这样 webVC 将不会被释放

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多