【问题标题】:Crash when trying to push view controller in Swift尝试在 Swift 中推送视图控制器时崩溃
【发布时间】:2018-11-26 15:31:02
【问题描述】:

我遇到了一个奇怪的问题,当我尝试推送新的视图控制器时,我的应用程序崩溃了。我已经设置了滑动手势,并希望在检测到滑动时切换到另一个视图控制器。当我运行这两行代码时...

let viewController:ViewController = ViewController()
self.navigationController?.pushViewController(viewController, animated: true)

当我在 viewDidLoad 方法中运行这段代码时,应用程序崩溃不是专门在这两行代码中而是在我的 ViewController 类中崩溃...

imageView.layer.masksToBounds = true

如果我注释掉它,当我设置我的 textField 的自动更正类型时它会崩溃。我做错了什么?

【问题讨论】:

  • 看起来imageView 为零。或许你可以把ViewController的代码贴出来?
  • 尝试在viewDidAppear中设置imageView.layer.masksToBounds = true
  • 如果imageView 是@IBOutlet,它应该在viewDidLoad 被调用之前设置。如果没有,那就有问题了。
  • ImageView 是一个 IBOutlet,这让我很担心。

标签: ios swift uiviewcontroller viewcontroller


【解决方案1】:

当视图立即崩溃时,我首先查看的是 InterfaceBuilder 中该 ViewController 的 Outlets。我寻找任何带有感叹号的东西。这通常意味着我重命名了一个插座或以某种方式断开了连接。通过按乱七八糟的项目旁边的小 x 来删除任何损坏的东西。我会附上一张照片让你看看。

【讨论】:

    【解决方案2】:

    您似乎正在加载一个存在于情节提要中的 ViewController

    let viewController:ViewController = ViewController()
    

    这将导致 nil outlets ,所以你必须使用

    let viewController = storyboard.instantiateViewController(withIdentifier: "VCID") as! ViewController
    

    并为该 vc 提供一个故事板标识符,例如 VCID

    【讨论】:

    • 我听从了您的建议(更改了该行代码并为情节提要提供了相应的 id),但是当我尝试实例化 viewcotnroller 时,应用程序在您的答案中的代码行上崩溃了。知道为什么吗?
    • 在日志中它只是说 lldb,线程 1:致命错误:在展开可选值时意外发现 nil
    • 确保硬编码的 id 相同,默认故事板也是 Main ,你的 vc 在里面吗??
    • 我已经确定硬编码的 id 是一样的,而且我的 vc 在 Main.storyboard 里面
    • 能不能快点分享一个有问题的github demo
    【解决方案3】:

    我想我已经解决了这个问题,但它有一个奇怪的副作用。我没有使用@Sh_Khan 的答案中的代码行,而是使用...

    let viewController = nav?.storyboard!.instantiateViewController(withIdentifier: "mainVC") as! ViewController
    

    变量nav 等于当前视图控制器的导航控制器。这似乎可以正常工作,但由于某种原因在执行 segue 后后退按钮不会从导航控制器中消失。有谁知道这个问题的解决方案,如果有,请发表评论,我会更新我的答案。

    编辑: 另一个问题是它会清除用户在 ViewController 上更改的所有内容。是否有另一种方法可以在不清除 ViewController 的情况下实例化它?

    【讨论】:

    • 它可能会抹去一切,因为像这样实例化一个 VC 会创建该 VC 的一个全新实例,它与可能已经存在的实例不同。
    【解决方案4】:

    遵循@Sh_Khan 所说的内容,除此之外,请确保您从中进行推送的视图嵌入在导航控制器中。

    【讨论】:

    • 不推荐使用 Segue,请在控制器本身之外协调您的视图控制器。
    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多