【问题标题】:EXC_BAD_ACCESS error at init(coder aDecoder:) line in swift2swift2 中 init(coder aDecoder:) 行的 EXC_BAD_ACCESS 错误
【发布时间】:2016-06-07 06:43:46
【问题描述】:

我不能完全理解我做错了什么。我尝试删除 optional(?) 但没有结果。

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

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 新手,不知道该怎么做。请帮帮我。

提前致谢。

【问题讨论】:

  • 您需要通过包含 ? 将您的子类 init 方法标记为失败因为超类初始化器是失败的。
  • @Paulw11 您能否通过发布一些代码来详细说明。我对 swift 很陌生。
  • @Paulw11 正如您在我的问题中提供的第一张图片中看到的那样,我做了同样的事情,但仍然出现错误!
  • 是的,抱歉,您的问题令人困惑。您应该发布代码而不是图像。该异常的最常见原因是某些东西为零。你是如何创建这个视图对象的? NSCoder 是从哪里来的?
  • @Paulw11 我已经发布了我的完整代码。你能帮我找出解决办法吗?

标签: ios swift2


【解决方案1】:

该错误是由于无限循环以及我没有为 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
}

在您的视图控制器中 ->

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/。这个博客肯定会清除你所有的疑惑。

希望有人觉得这些有用。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我迷茫了这么久!这真的很有帮助!!!
    猜你喜欢
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多