我有一个基于文档的应用程序,其中包含建议的NSDocument
/ NSWindowController
设置。每个窗口都有自己的NSWindowController
实例和关联的XIB文件。界面在-(id)init
:if (self = [super initWithWindowNibName:@"DocumentWindow"]) { // yadda yadda }
中非常直接地加载。 XIB文件包含一个对象,该对象表示每次用户打开新窗口时应该实例化的单独控制器。它提供的数据仅与当前文档相关。当我使用-(id)initWithWindowNibName:
解包对象时,尽管有两个不同的窗口控制器并且尽管已经两次调用-(id)initWithWindowNibName:
,但我总是得到对同一个实例的引用。 XIB加载机制似乎只解包了相同的归档对象(真的吗?)。
除了在代码中分配单独的对象,手动加载视图,计算它们的大小,将它们添加为子视图,然后设置绑定并在窗口关闭时注意手动取消绑定它们之外没有办法吗?
由于我自己的愚蠢,我正撞在墙上。它只会让事情变得更糟。
答案 0 :(得分:1)
正如我最初认为我绝对走错了路。问题很简单,我在上述实例化类中注册了一个通知,该对象是应用程序keyWindow
的子视图(我将它一起攻击并希望稍后将其更改为属性, ouch )。当加载应用程序时,所有实例都为所有文档窗口注册,并且所有实例都被通知并计算相同的数据。
调试器是我今天最好的朋友。
当您从XIB中取消归档对象时,实际上没有什么比优化更好的了,并且您将始终获得不同的实例(回想起来绝对有意义)。如果您遇到类似的问题,那么它可能是您代码中其他位置的无关错误。