在 iOS 8 上呈现 NIB 模态崩溃,但在 iOS 9+ 上不会
Presenting a NIB Modally Crashes on iOS 8 but not on iOS 9+
我创建了一个名为 SomeViewController
的 NIB,所有相应的代码都是正确的,所有的视图都正确绑定,但是不知何故代码 self.presentViewController(SomeViewController(), animated: true, completion: nil)
导致崩溃:
fatal error: unexpectedly found nil while unwrapping an Optional value
有什么问题?
要解决此问题,我们需要通过执行此操作来检查版本
if #available(iOS 8, *) {
self.presentViewController(SomeViewController(nibName: "SomeViewController", bundle: nil), animated: true, completion: nil)
} else {
self.presentViewController(SomeViewController(), animated: true, completion: nil)
}
或
self.presentViewController(SomeViewController(nibName: "SomeViewController", bundle: nil), animated: true, completion: nil)
出于某种原因 iOS 8 在初始化时不会自动包含 nibName 及其对应的 class。
更新:
也可以通过这样做来修复
class SomeViewController: UIViewController {
init() {
super.init(nibName: "SomeViewController'sNibNameHere", bundle: nil)
}
}
// on some other part of your code
self.presentViewController(SomeViewController(), animated: true, completion: nil)
我创建了一个名为 SomeViewController
的 NIB,所有相应的代码都是正确的,所有的视图都正确绑定,但是不知何故代码 self.presentViewController(SomeViewController(), animated: true, completion: nil)
导致崩溃:
fatal error: unexpectedly found nil while unwrapping an Optional value
有什么问题?
要解决此问题,我们需要通过执行此操作来检查版本
if #available(iOS 8, *) {
self.presentViewController(SomeViewController(nibName: "SomeViewController", bundle: nil), animated: true, completion: nil)
} else {
self.presentViewController(SomeViewController(), animated: true, completion: nil)
}
或
self.presentViewController(SomeViewController(nibName: "SomeViewController", bundle: nil), animated: true, completion: nil)
出于某种原因 iOS 8 在初始化时不会自动包含 nibName 及其对应的 class。
更新:
也可以通过这样做来修复
class SomeViewController: UIViewController {
init() {
super.init(nibName: "SomeViewController'sNibNameHere", bundle: nil)
}
}
// on some other part of your code
self.presentViewController(SomeViewController(), animated: true, completion: nil)