【问题标题】:UINavigationController push crashUINavigationController 推送崩溃
【发布时间】:2019-12-14 20:48:24
【问题描述】:

我有一个 NestedViewController,我试图将它推入 UINavigationController。这会导致崩溃并显示以下堆栈跟踪:

另外:

  • 所有这些都发生在主线程上
  • 这在 iOS 11 和 12 上都重现
  • animated 标志不会改变任何东西
  • NestedViewController 以模态方式呈现在应用程序的其他位置,并且成功地呈现,没有崩溃
  • NestedViewController 从情节提要中获取其布局
  • NestedViewController 的视图以编程方式初始化并与故事板布局相同,但仍会导致崩溃
  • 推送一个空的 UIViewController 不会导致崩溃

我做错了什么?

UPD1:我做了这个,但这不会导致崩溃:

let controlla = { () -> UIViewController in
    let cont = UIViewController()
    cont.view = {
        let view = UIView()

        view.backgroundColor = UIColor.green
        let stack = UIStackView(arrangedSubviews: [ {
            let view = UIView()
            view.backgroundColor = UIColor.yellow

            view.snp.makeConstraints { make in
                make.height.equalTo(128)
            }
            return view
        }() ])
        view.addSubview(stack)

        stack.snp.makeConstraints { make in
            make.top.leading.trailing.equalToSuperview()
        }

        return view
    }()
    return cont
}()

controller.pushViewController(controlla, animated: true)

UPD2:应用户 Adeel 在评论中的请求,这里是在中止断点命中时控制台中所说的内容:

libc++abi.dylib: terminating with uncaught exception of type NSException

如果它是如此简单并且信息在那里,那么这个问题就不会真正存在,不是吗。

UPD3:所以为了扩展我的调查,我已经卸载了视图控制器内的所有视图,除了根视图。

场景树开始看起来像这样:

然后,当然,我摆脱了所有插座和视图控制器中的代码。

它仍然崩溃。不过,模态呈现仍然可以正常工作。

UPD4:我将 NestedViewController 重命名为其他名称以防万一。没用。

UPD5:在 UPD1 之前,它看起来像这样:

controller.pushViewController(controller, animated: true)

【问题讨论】:

  • 您能否分享整个崩溃日志,而不是张贴图片?特别是它说“由于未捕获的异常而终止应用程序”的行(如果存在)。
  • @Adeel 好的,将其发布在问题的 UPD2 部分

标签: ios uiviewcontroller uinavigationcontroller pushviewcontroller


【解决方案1】:

如 UPD5 中所述,您推入导航控制器的控制器实际上就是同一个控制器本身。

【讨论】:

    【解决方案2】:

    检查这个stackOverflow

    崩溃信息不明确。希望能给你带来启发。

    【讨论】:

    • 不,很遗憾,此声明无效。在尝试 KVC 时,丢失的 outlet 总是会导致无法识别的 key 异常,通常在 -[NSObject+ (NSKeyValueCoding) setValue:forKey:] 中,它在 -[UIViewController loadView] 的过程中被调用。此方法可能在模态演示/导航控制器推送之前和之后调用,因此此故障与视图控制器状态无关。
    • 剧透:我肯定知道这一点,因为我恰好有一个崩溃日志,其中发生了这种确切的情况,与所讨论的流程无关。
    • 不知道。检查一下,也许它可以激发您的灵感。 stackoverflow.com/questions/26442414/…
    猜你喜欢
    • 2014-02-02
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多