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。