【发布时间】:2015-11-29 11:50:48
【问题描述】:
我正在尝试将我准备好的位于 xib 文件中的 UIView 嵌入到情节提要中。
到目前为止我所做的是:
class TestUIView : UIView {
@IBOutlet weak private var firstButton: UIButton!
@IBOutlet weak private var secondButton: UIButton!
// MARK - Lifetime
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let view = NSBundle.mainBundle().loadNibNamed("TestUIView", owner: self, options: nil).first as! TestUIView
self.addSubview(view)
}
}
但由于某种原因,我得到了错误的访问内存异常。 通过查看堆栈跟踪,我看到一大堆对 initWithCoder 的调用 http://i.stack.imgur.com/iH6Am.png 我不确定为什么 NSBundle.mainBundle().loadNibNamed 会导致这种情况,有什么想法吗?
【问题讨论】:
-
推测 nib 文件包含一个
TestUIView的实例,所以当loadNibNames加载 nib 时,它会通过调用init(coder)实例化一个TestUIView实例来加载 nib 等等直到递归导致堆栈爆炸。为什么要在init(coder)中加载笔尖?