在 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)