swift2中初始化(编码器aDecoder:)行时出现EXC_BAD_ACCESS错误

ekqde3dh  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(200)

我不知道我到底做错了什么。我试着删除可选的(?),但没有结果。

下面是我的自定义视图的总代码:-

class CustomView: UIView {

    var vieww: UIView!

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupView()
    }

    func loadViewFromib () -> UIView {
        let bundle = NSBundle(forClass: self.dynamicType)
        let nib = UINib(nibName: NSStringFromClass(self.dynamicType).componentsSeparatedByString(".").last!, bundle: bundle)
        let view = nib.instantiateWithOwner(self, options: nil).first as! UIView

        return view
    }

    func setupView() {
        vieww = loadViewFromib()

        vieww.frame = CGRectMake(0, 0, 300, 150)
        vieww.center = center
        addSubview(vieww)

        /// Adds a shadow to our view
        vieww.layer.cornerRadius = 4.0
        vieww.layer.shadowColor = UIColor.blackColor().CGColor
        vieww.layer.shadowOpacity = 0.2
        vieww.layer.shadowRadius = 4.0
        vieww.layer.shadowOffset = CGSizeMake(0.0, 8.0)
    }

我是swift的新手,不知道该怎么做,请帮帮我。
先谢谢你。

pinkon5k

pinkon5k1#

这个错误是由于一个无限循环引起的,也是由于我没有向CustomView提供任何帧的事实。我在设置断点并一步一步地进行之后发现了这个错误。
以下是解决方案(CustomView中的代码):-

override init(frame: CGRect) {
    super.init(frame: frame)
    setupView()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setupView()
}

func setupView() {

  // do all your setup for your view here
}

在ViewController中-〉

lazy var popupView :CustomView = {
    let popupView = CustomView(frame: CGRectMake(0,0,300,150))
    return popupView
}()

这里有一个来自堆栈溢出的链接,它消除了我所有的疑虑。
Fatal error: use of unimplemented initializer 'init(coder:)' for class
如果还有人有任何疑问,你可以参考http://www.edwardhuynh.com/blog/2015/02/16/swift-initializer-confusion/。这个博客一定会清除你所有的疑问。
希望有人觉得这些有用。

axzmvihb

axzmvihb2#

Inspector下的Custom Class中设置Module解决了我的问题。您可以将该模块设置为与自定义类相同,也可以设置为从继承的类。

相关问题