切换到 Xcode 6 Beta 5 后,所有 IBOutlets 都变为 nil
Posted
技术标签:
【中文标题】切换到 Xcode 6 Beta 5 后,所有 IBOutlets 都变为 nil【英文标题】:All IBOutlets become nil after switching to Xcode 6 Beta 5 【发布时间】:2014-08-06 01:35:59 【问题描述】:例如,视图控制器中有一个属性
@IBOutlet weak var nameLabel: UILabel!
此属性在viewWillAppear
和viewDidLoad
内是nil
,因此应用程序在运行时崩溃。
它在 Xcode 6 Beta 4 中运行良好。在我切换到 Beta 5 后,它抱怨控制器类 does not implement its superclass's required members
。所以我加了
required init(coder aDecoder: NSCoder!)
super.init(coder: aDecoder)
那个编译器错误消失了。但是,unexpectedly found nil while unwrapping an Optional value
的应用程序崩溃,因为当我尝试设置其 text
时,nameLabel
属性是 nil
。
我通读了发行说明,但不知道如何解决此问题。
【问题讨论】:
Same here 现在我发现这不仅是我的问题,而且我不相信苹果提交的 Beta5 有这么大的错误...... 是你的控制器UICollectionViewController
?
不,我的是UIViewController
的子类
我在使用 Beta 5 时遇到了所有奇怪的问题。我想我会恢复到 Beta 4 并等待 Beta 6
Apple 有人告诉我解决方法。请参阅下面的修改后的答案。
【参考方案1】:
我在 Beta5 中遇到了同样的问题。这似乎是一个问题,
init(nibName: nil, bundle: nil)
没有将 nil 映射到默认的 nibName。当我更改为显式 nibName 时,它就起作用了。特别是在我的情况下,使用新的 ??运营商:
override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!)
// beta5 workaround: replace nil with explicit name of xib file
let nib = nibNameOrNil ?? "MyViewController"
super.init(nibName: nib, bundle: nibBundleOrNil)
// local initialization here
让它再次神奇地工作。
【讨论】:
这是一个很好的解决方法,因为 (1) 它将责任放在视图控制器本身的肩上,(2) 它使用了很酷的新??
运算符。 :)
呃,我花了太多时间与编译器作斗争,然后对这次崩溃感到困惑。谢谢。
此错误已在 ios 9 beta 4 中修复,因此无需使用此解决方法。【参考方案2】:
这是一个临时错误。解决方法是:以覆盖名称修饰的方式声明您的视图控制器,如下所示:
@objc(ViewController) ViewController : UIViewController // or whatever its name is
另请参阅:Are view controllers with nib files broken in ios 8 beta 5?
编辑此错误已在 iOS 9 beta 4 中修复。
【讨论】:
以上是关于切换到 Xcode 6 Beta 5 后,所有 IBOutlets 都变为 nil的主要内容,如果未能解决你的问题,请参考以下文章
将 Xcode 6 beta 6 更新到 beta 7 后出现“可选错误”
将 xcode 6 beta 6 升级到 xcode 6 GM 种子后的 Swift 编译器错误
更新到 Xcode 7 Beta 5 并收到此错误:失败,退出代码 6
使用 Xcode6-Beta 运行 Xcode 5.1.1 项目