IBOutlet是某种NSZombie?

IBOutlet是某种NSZombie?

问题描述:

这是一个OS X应用程序。我正在设计一个自定义表单。在我的XIB文件中,我有工作表的窗口和NSViewController的子类,它负责控制窗口/工作表中的视图。 XIB的所有者是另一个控制器类。IBOutlet是某种NSZombie?

我在窗口的内容视图中放置了NSTextField。在我的NSViewController中,我为NSTextField创建了IBOutlet声明,并确保插座在XIB中正确连接。

我覆盖 - [NSViewController setRepresentedObject:],并在该方法中,我正在查看呈现的对象,并根据它的属性,我要么删除NSTextField从它的超级视图或我将它添加回超级视图。

我第一次显示带有指示文本字段的表示对象的工作表时,应该从超级视图中删除。这工作得很好。

第二次我显示我的工作表与代表文本字段应该被添加回超视图我的应用程序与EXC_BAD_ACCESS崩溃时调用 - [NSView addSubview:]。

Running Instruments显示NSTextField是我当时试图将其添加回超级视图的僵尸。工具还指出,每次保留/释放/自动释放的调用都由AppKit或Foundation执行 - 因此我的任何代码都不会增加或减少保留数。实际上,在我的代码中引用IBOutlet的唯一两行代码是调用 - [NSView removeFromSuperview]和 - [NSView addSubview:]。

我做错了什么或者这是OS X中的错误?除非XIB被卸载,否则IBOutlet不应该被释放。

很自然,当我发布我的问题后2分钟就知道了。

我的XIB中实际上有2个文本框,它们与问题中描述的行为相同。只有一个textfields变成了NSZombie,这让事情变得更加混乱。

当我在设计XIB时,我放下了一个NSTextField,配置它,然后在拖动NSTextField时按住Option复制它。我确实确认了复制的NSTextField的插口已正确设置,但由于某些原因,对象保持不变。

解决的办法是删除有问题的NSTextField,然后从调色板中删除一个新的,并配置它。

+0

请向http://bugreport.apple.com提交一份描述性的错误报告 - 如果确实发生了这种情况,那么这是一个Xcode错误,应该一定要修复。 –

+0

我想我会重复样本项目中的问题并将其作为错误提交,如果它实际上是可重现的。谢谢。 – Carter