我正在尝试在viewController
中添加子视图。为了执行该操作,我创建了一个xib
文件和一个关联的类。相关类的代码如下:
import UIKit
@IBDesignable class CustomClassViewController: UIView {
@IBOutlet weak var myLabel: UILabel!
var Dummyview : UIView! //= UIView()
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init (coder aDecoder : NSCoder){
super.init(coder : aDecoder)!
setup()
}
func setup() {
Dummyview = loadViewFromNib()
Dummyview.frame = bounds
Dummyview.autoresizingMask = UIViewAutoresizing.FlexibleWidth
Dummyview.autoresizingMask = UIViewAutoresizing.FlexibleHeight
addSubview(Dummyview)
}
func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass : self.dynamicType)
let nib = UINib(nibName: "Custom View", bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return view
}
在运行应用程序之前它没有显示错误,但在运行应用程序时它崩溃了。错误显示如下:
"威胁1:EXC_BAD_ACCESS(代码= 2,地址= 0x7fff52776e88)"
super.init(coder : aDecoder)!
但输出中的无错误。
我该怎么办?有解决方案吗请告诉我。 提前致谢
答案 0 :(得分:0)
使用编码器初始化可能会失败,你不应该在那里使用强制解包。请尝试以下方法:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
您的类CustomClassViewController也是UIView的子类,而不是UIViewController。改变这一行
@IBDesignable class CustomClassViewController: UIView {
到
class CustomClassViewController: UIViewController {
注意:视图控制器不能是IBDesignable
答案 1 :(得分:0)
nib不应在接口构建器中设置类。否则,你会得到一个无限循环,因为你的类每次调用nib时都会尝试实例化它。
如果要在故事板中使用此视图模板,请拉入视图并将其设置为自定义视图类。