swift2 中 init(coder aDecoder:) 行的 EXC_BAD_ACCESS 错误
Posted
技术标签:
【中文标题】swift2 中 init(coder aDecoder:) 行的 EXC_BAD_ACCESS 错误【英文标题】:EXC_BAD_ACCESS error at init(coder aDecoder:) line in swift2 【发布时间】: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 我已经发布了我的完整代码。你能帮我找出解决办法吗?
【参考方案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
解决了我的问题。您可以将模块设置为与自定义类或继承自的类相同。
【讨论】:
我迷茫了这么久!这真的很有帮助!!!以上是关于swift2 中 init(coder aDecoder:) 行的 EXC_BAD_ACCESS 错误的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 为啥在 AFHTTPSessionManager 中需要 init(coder)?
Swift init 方法错误:声明 'init(coder:)' 不能覆盖多个超类声明