gpt4 book ai didi

objective-c - IBOutlet 是一个 NSZombie?

转载 作者:行者123 更新时间:2023-12-03 17:57:34 27 4
gpt4 key购买 nike

这是一个 OS X 应用程序。我正在设计一个定制表。在我的 XIB 文件中,我有工作表的窗口和 NSViewController 的子类,它负责控制窗口/工作表中的 View 。 XIB 的所有者是另一个 Controller 类。

我将一个 NSTextField 放入窗口的内容 View 中。在我的 NSViewController 中,我为 NSTextField 创建了一个 IBOutlet 声明,并确保导出在 XIB 中正确连接。

我覆盖了 -[NSViewController setRepresentedObject:] ,在该方法中,我正在查看representedObject,并根据它的属性,我要么从它的 super View 中删除 NSTextField,要么将其添加回 super View 中。

我第一次使用表示对象显示工作表,该对象指示应从 super View 中删除文本字段。这工作得很好。

第二次我使用representedObject显示工作表时,该对象指示应将文本字段添加回 super View ,在调用-[NSView addSubview:]时,我的应用程序因EXC_BAD_ACCESS而崩溃。

运行仪器显示,当我尝试将 NSTextField 添加回 super View 时,它是一个僵尸。 Instruments 还表明每次对保留/释放/自动释放的调用都是由 AppKit 或 Foundation 执行的 - 因此我的任何代码都不会增加或减少保留计数。事实上,在我的代码中引用 IBOutlet 的唯一两行是对 -[NSView removeFromSuperview] 和 -[NSView addSubview:] 的调用。

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

最佳答案

很自然地,我在发布问题后两分钟就弄清楚了。

我的 XIB 中实际上有 2 个文本字段,它们都具有与问题中描述的相同的行为。只有一个文本字段变成了 NSZombie,这让事情变得更加困惑。

当我设计 XIB 时,我放置了一个 NSTextField,对其进行配置,然后通过按住 Option 并拖动 NSTextField 来复制它。我确实确保了复制的 NSTextField 的导出设置正确,但由于某种原因,对象保持不变。

解决方案是删除有问题的 NSTextField,然后从调色板中删除一个新的 NSTextField 并以这种方式进行配置。

关于objective-c - IBOutlet 是一个 NSZombie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11169514/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com