【问题标题】:Cocoa NSOutlineView bug - [NSCFTimer copyWithZone:]: unrecognized selector sent to instanceCocoa NSOutlineView 错误 - [NSCFTimer copyWithZone:]: 无法识别的选择器发送到实例
【发布时间】:2010-06-05 19:11:16
【问题描述】:

我正在使用带有函数的 NSOutlineView

- (BOOL)outlineView:(NSOutlineView *)outlineView
  isGroupItem:(id)item

已定义,因此它提供了组行 GUI 外观。当我添加根项目时,它工作正常。当我将一个项目添加到根的子数组并展开它时,它工作正常。但是,如果我签约该项目,则会记录以下错误:

[NSCFTimer copyWithZone:]: unrecognized selector sent to instance

如果通过切换到另一个应用程序停用了应用程序窗口,我也会收到 EXC_BAD_ACCESS 错误。我使用调试器试图找到我可能在我的一个函数中出错的地方,但堆栈跟踪只显示我没有创建的函数(RunCurrentEventLoopInMode、CFRunLoopRunSpecific、handleWindowNeedsDisplay 等)有谁知道我的错误在哪里(s) 可能是?

【问题讨论】:

    标签: cocoa


    【解决方案1】:

    听起来像一个物体过早死亡。当稍后使用相同的指针分配新对象然后尝试向旧对象发送消息时,您会收到“无法识别的选择器发送到实例”异常(在显示的示例中,转世是一个 NSTimer 并且该消息尝试发送发送前一个对象是copyWithZone:)。当对象只是垃圾内存时,您会得到 EXC_BAD_ACCESS 崩溃。

    通过在启用了 Zombies 工具的 Instruments 下运行您的应用来调试此问题。该对象不会死亡,而是变成僵尸对象。当某物试图向僵尸发送消息时,僵尸会发出呻吟(形象地说),这将在 Instruments 的时间线上显示为旗帜。您可以单击该标志中的按钮来查看对象的历史记录,包括其所有保留和释放。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-09
      • 2014-10-17
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      相关资源
      最近更新 更多