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的主要内容,如果未能解决你的问题,请参考以下文章

FileHandler 创建会导致 NoSuchFileException 导致缺少 .lck

导致非标准行为的 #pragma 是不是会导致 __STDC__ 宏未定义为 1?

为啥 const int main = 195 会导致程序正常工作,但没有 const 会导致分段错误?

React 组件中的错误导致应用程序重新渲染,从而导致无限循环。为啥?

由于master宕机等导致resource调用出现异常,直接将该resource返回到pool以便其他代码使用会导致得到不可预期的结果,导致返回数据混乱。

java 导致多线程数据安全问题的原因