0

我有一个带有推荐NSDocument/NSWindowController设置的基于文档的应用程序。每个窗口都有自己的NSWindowController实例和关联的 XIB 文件。-(id)init该界面在:中非常直接地加载if (self = [super initWithWindowNibName:@"DocumentWindow"]) { // yadda yadda }。XIB 文件包含一个对象,该对象代表一个单独的控制器,每次用户打开新窗口时都应实例化该控制器。它显示仅与当前文档相关的数据。当我用解压对象时,-(id)initWithWindowNibName:尽管有两个不同的窗口控制器并且尽管调用-(id)initWithWindowNibName:了两次,但我总是得到对同一个实例的引用。XIB 加载机制似乎只对同一个归档对象进行一次解压,哪种是有意义的(真的吗?)。

除了在代码中分配单独的对象,手动加载视图,计算它们的大小,将它们添加为子视图,然后设置绑定并在窗口关闭时手动解除绑定之外,是否没有其他办法?

我用头撞墙,因为我自己的愚蠢。它只会让事情变得更糟。

4

1 回答 1

1

正如我最初认为的那样,我绝对走错了路。问题很简单,我在前面提到的实例化类中为一个对象注册了一个通知,该对象是应用程序的子视图keyWindow(我将它组合在一起,想稍后将其更改为一个属性,哎哟)。当应用程序被加载时,所有文档窗口注册的所有实例都得到通知并计算相同的数据。

调试器是我今天最好的朋友。

当您从 XIB 中取消归档对象时,实际上没有什么比优化更好的了,而且您总是会得到不同的实例(回想起来这绝对是有道理的)。如果您遇到类似的问题,那么它可能是代码中另一个位置的不相关错误。

于 2013-01-18T20:55:09.907 回答