调用Super.init时应用程序突然崩溃(编码器:aDecoder)

时间:2016-11-08 07:25:20

标签: ios swift xcode7 subview

我正在尝试在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)!

但输出中的无错误

我尝试了herehere中提供的解决方案,但没有成功。

我该怎么办?有解决方案吗请告诉我。 提前致谢

2 个答案:

答案 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时都会尝试实例化它。

如果要在故事板中使用此视图模板,请拉入视图并将其设置为自定义视图类。