Autolayout问题Xcode 8

转换我的代码到Swift 3我发现了一个奇怪的问题。 现在(2016年9月15日)Xcode 8(公开版)已经出来了,在转换代码之后,我的应用程序崩溃了,没有一个明显的原因。

自动布局有些问题,日志里写着这样的内容:

[_SwiftValue nsli_superitem]: unrecognized selector sent to instance 

我该如何解决? 谢谢

只是想出了奇怪的,但工作的解决scheme:

而不是这样做:

 let views = ["view":aView] view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "...", options:[], metrics: metrics, views: views)) 

明确声明字典:

 let views: [String:UIView] = ["view":aView] view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "...", options:[], metrics: metrics, views: views)) 

我知道,这很奇怪,但它的作品。 干杯

在迅速的3,我们与隐含的解包选项的工作方式已经改变。 考虑下面的例子:

 let optionalInt: Int! = 1 let int = optionalInt let array = [int, 2] print(array) // prints: [Optional(1), Optional(2)] 

因此,我们现在有了[Int?] ,而不是像预期的那样有一个[Int]types的数组,这会导致上面的运行时错误。


pascalbros的解决方法来明确声明variables的types解决了问题,但是为了确保发生了什么,我build议检查可能的optionals意外地进入数组或字典并更改其推断的types。