访问非空变量时出现 EXC_BAD_ACCESS 异常
Posted
技术标签:
【中文标题】访问非空变量时出现 EXC_BAD_ACCESS 异常【英文标题】:Getting EXC_BAD_ACCESS exception when accessing non null variable 【发布时间】:2019-07-30 00:25:36 【问题描述】:正如您在链接图像中看到的那样,我得到:
EXC_BAD_ACCESS(代码=1,地址=0x0)
当访问outline.numberOfChildren
但lldb
表明轮廓不是nil
并且outline.numberOfChildren
是0(这正是在这种情况下应该是什么)。为什么会这样?
谢谢。
图片链接:https://imgur.com/a/StLBued
代码:
func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool
if self.rootOutline != nil
if let outline = item as? PDFOutline
if outline.numberOfChildren == 0 // <- Error here
return false
return true
if self.rootOutline!.numberOfChildren == 0
return false
return true
return false
github 上 Xcode 项目的链接:https://github.com/raphaelreyna/Chapters
【问题讨论】:
您应该在问题中发布代码而不是使用屏幕截图,这可能是问题被否决的原因。 彼得·鲁珀特,感谢您的编辑。 没问题,祝你好运!NSOutline
是错字吗?我没有找到有关它的文档,并且您的 git 中心在同一个地方显示 PDFOutline
。
Ricky Mo,是的,打错字了,应该是 PDFOutline。
【参考方案1】:
大纲被延迟加载,如果PDFDocument
从内存中释放,则无法加载。解决方案:保持对PDFDocument
的强引用。
【讨论】:
但是if let outline = item as? PDFOutline
不是在创建你提到的强引用吗?
这行得通,谢谢 Willeke。我从来没有想到这是问题所在。
@Cristik item
是对 PDFOutline
的强引用,但 PDFOutline
项不保留对文档的强引用,document
是 PDFOutline
的弱属性. outlineRoot
是 PDFDocument
的强属性。在 outlineView(_:isItemExpandable:)
中创建强引用将不起作用,因为该文档已发布。以上是关于访问非空变量时出现 EXC_BAD_ACCESS 异常的主要内容,如果未能解决你的问题,请参考以下文章
在 OCMock 的 andDo 中访问参数时出现 EXC_BAD_ACCESS
尝试更改 Bool 属性时出现 EXC_BAD_ACCESS 错误