【问题标题】:Why is my UIViewController's view nil?为什么我的 UIViewController 的视图为零?
【发布时间】:2016-11-14 00:19:25
【问题描述】:

我不熟悉以编程方式呈现 UIViewcontroller,但在呈现其视图时遇到了一些问题。这是我的代码:

override func willBecomeActive(with conversation: MSConversation) {
    let controller = instantiateUserStickersController()
    self.addChildViewController(controller)
    self.view.addSubview(controller.view) //This line throws the error
}
private func instantiateUserStickersController() -> UIViewController {
    guard let controller = storyboard?.instantiateViewController(withIdentifier: "UserStickersViewController") as? UserStickersViewController else { fatalError("Unable to instantiate a UserStickersViewController from the storyboard") }

    return controller
}

为什么我无法访问控制器的视图?我确定我正确设置了故事板 ID

这是我的故事板:

【问题讨论】:

  • 您看到了什么错误?您的示例中的 fatalError 还是来自 UIKit 的不同错误?
  • 不同。这不是一个展开的 nil 错误。这就是我得到的全部内容“libc++abi.dylib:以 NSException 类型的未捕获异常终止”
  • 在这种情况下的预期行为,假设controllerUIViewController 子类,如果view 尚不存在,则在此创建它。该视图控制器是打算以编程方式发明自己还是在故事板或NIB中?而且,按照 Jonah 的说法,实际的错误是什么?
  • Controller 是一个 UserStickersViewController,是我在故事板上绘制的 UICollectionViewController 的子类。而且我没有收到特定错误,只是 NSException。
  • NSException 将包含一个名称和描述它被抛出的原因。设置一个异常断点并找出具体是什么导致了这个异常以及它是从哪里抛出的。

标签: ios uiviewcontroller


【解决方案1】:

view 在您呈现视图控制器以启动其生命周期之前不应该存在。所以只有在新控制器的viewpresented 时才能访问它:

self.addChildViewController(controller)
self.present(controller, animated: true) {
    self.view.addSubview(controller.view) 
}

这对我有用。

【讨论】:

    猜你喜欢
    • 2016-07-20
    • 1970-01-01
    • 2012-07-31
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多