我得到"无法加载任何Objective-C类信息。这将显着降低可用类型信息的质量。"初始化此类的实例时在控制台中发出警告:
@IBDesignable
class SystemMessage: UIView{
@IBOutlet weak var lbl_message: UILabel!
var view: UIView!
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup(){
view = loadViewFromNib()
view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
addSubview(view)
}
func loadViewFromNib() -> UIView{
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: "SystemMessage", bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return view
}
}
执行在let view = nib.instantiateWithOwner...
行停止"线程1:EXC_BAD_ACCESS(代码= 2 ...)"
这背后可能的原因是什么?
答案 0 :(得分:8)
找到解决方案。这一切都是为了理解xib如何工作。
我所做的是我为视图和文件所有者设置了类,并连接了View中的所有出口而不是文件所有者。
答案 1 :(得分:0)
这似乎是你要在实例化一个视图的过程中走得很远。您有一个类SystemMessage
的视图,它实例化一个名为SystemMessage
的笔尖,然后将其作为视图插入:/
最简单的方法是将Xib中的根视图设置为SystemMessage
然后将您的插座连接到刚刚提供正确类型的视图
这意味着您可能会丢失代码并最终
import UIKit
@IBDesignable
class SystemMessage: UIView {
@IBOutlet weak var lbl_message: UILabel!
static func loadViewFromNib() -> SystemMessage {
return NSBundle(forClass: self).loadNibNamed("SystemMessage", owner: nil, options: nil).first as! SystemMessage
}
}
这只是为您提供了一种使用SystemMessage.loadViewFromNib()
从代码中实例化视图的简便方法。在此实例中可能未正确设置File's Owner