访问非空变量时出现 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.numberOfChildrenlldb 表明轮廓不是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 项不保留对文档的强引用,documentPDFOutline 的弱属性. outlineRootPDFDocument 的强属性。在 outlineView(_:isItemExpandable:) 中创建强引用将不起作用,因为该文档已发布。

以上是关于访问非空变量时出现 EXC_BAD_ACCESS 异常的主要内容,如果未能解决你的问题,请参考以下文章

在 OCMock 的 andDo 中访问参数时出现 EXC_BAD_ACCESS

按下按钮时出现错误 EXC_BAD_ACCESS

上传数据时出现错误访问错误

尝试更改 Bool 属性时出现 EXC_BAD_ACCESS 错误

滚动 UITableView 时出现 EXC_BAD_ACCESS 错误

滚动 UITableView 时出现错误的 EXC_BAD_ACCESS