大小类 - traitCollectionDidChange以nil值崩溃

时间:2014-10-15 08:50:49

标签: swift size-classes

我有一个使用Size Classes的故事板的快速项目,ViewController符合UITraitEnvironment协议并已实现函数traitCollectionDidChange

当我第一次启动应用程序traitCollectionDidChange被调用时似乎是合理的 - 它允许开发人员处理应用程序提供的第一个大小类,但是传递给它的previousTraitCollection变量是{{1} }。我无法检查此值是nil,因为它是NOT可选项,并且以任何方式访问它都会导致崩溃。在函数声明中将参数更改为optional会导致生成错误,抱怨我没有在协议中实现所需的方法。

现在我已经设法通过创建一个单独的函数来解决这个问题,该函数采用了我可以检查的相同类型的可选变量,但我想知道为什么会发生这种情况。

如果它对任何人都有用,那么这就是我重写的功能

nil

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:2)

您必须声明参数的类型是可选的,因为访问它会强制编译器尝试解压缩导致崩溃的地址。替换为:

override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
    // Accessing previousTraitCollection causes a crash
}