awakeAfterUsingCoder() 导致 EXC_BAD_ACCESS
Posted
技术标签:
【中文标题】awakeAfterUsingCoder() 导致 EXC_BAD_ACCESS【英文标题】:awakeAfterUsingCoder() causing EXC_BAD_ACCESS 【发布时间】:2015-09-30 23:54:06 【问题描述】:我有一个在 InterfaceBuilder 中设计的 UIView,它有一个 Swift 支持类。我正在使用awakeAfterUsingCoder()
来替换实例化的笔尖,如下所示:
public override func awakeAfterUsingCoder(aDecoder: NSCoder) -> AnyObject?
if self.subviews.count == 1 && self.subviews[0].isKindOfClass(UILabel)
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: "CustomView", bundle: bundle).instantiateWithOwner(nil, options: nil)
return nib[0] as! CustomView
return self
但是,现在我在 AppDelegate 中不断收到EXC_BAD_ACCESS
崩溃。我打开了僵尸并能够收到此消息:
*** -[ModuleName.CustomView _referenceView]:消息发送到已释放实例 0xed13600
_referenceView
必须在框架中的某个地方定义,尽管当我导航到在断点处停止的self
时我没有看到它。我做错了什么?
【问题讨论】:
【参考方案1】:我的故事板中的视图被定义为UIButton
(因为我的 CustomView 是 UIButton 子类)。我将它替换为一个通用的空UIView
,我将条件替换为:
if self.subviews.isEmpty
一切正常。
【讨论】:
以上是关于awakeAfterUsingCoder() 导致 EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章