Cocoa NSOutlineView 错误 - [NSCFTimer copyWithZone:]: 无法识别的选择器发送到实例

Posted

技术标签:

【中文标题】Cocoa NSOutlineView 错误 - [NSCFTimer copyWithZone:]: 无法识别的选择器发送到实例【英文标题】:Cocoa NSOutlineView bug - [NSCFTimer copyWithZone:]: unrecognized selector sent to instance 【发布时间】: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) 可能是?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于Cocoa NSOutlineView 错误 - [NSCFTimer copyWithZone:]: 无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章

NSTreeController/NSOutlineView 失去选择

MacOS-NSOutlineView使用

使用 NSOutlineView 作为文件浏览器,从给定目录开始

以编程方式将核心数据实体中的项目放入 NSOutlineView?

initWithFrame 未调用,但 awakeFromNib 是

NSOutlineView 中的 NSTextView 与 IntrinsicContentSize 设置错误的高度