如何在另一个xib中访问属于MyDocument的NSArray实例?

时间:2011-05-17 08:31:00

标签: objective-c nswindow nsarraycontroller nsdocument nswindowcontroller

在我的文档应用程序中,我将一个NSArrayController子类化,我在MyDocument.xib中引用它将其内容绑定到 File的Owner.entries

entries是一个NSArray,我以这种方式公开为MyDocument类的属性:

@interface MyDocument : NSDocument {
    NSArray *entries;
}

-(NSArray *)entries;
-(void)setEntries:(NSArray *)newEntries;
@end

这完全没问题。好。

现在我设计了另一个.xib,CSVEntries.xib,我通过NSWindowController通过NSMenuItem打开,再次,这很顺利。

我无法弄清楚如何让这个新窗口显示NSTableView中MyDocument.entries实例的内容。

我尝试了很多东西,但问题基本上是我放在CSVEntries.xib上的任何NSArrayController都不能绑定到MyDocument.entries :CVSEntries.xib文件的所有者指的是其他东西没有MyDocument(我猜这是合乎逻辑的)。

我还尝试将NSArray实例的副本添加到NSWindowController,它打开CVSEntries.xib,但由于窗口只在用户点击菜单时才实例化,所以我最终得到一个空数组。

我在互联网上搜索但找不到合适的答案,我只想弄清楚解决问题的正确方法,我确信两个窗口可以互相通信,也许可以访问他们的共同父级(NSApplication实例) )?

所有新手问题,我知道:)

更新

我想我想出去哪里看但仍然不怎么样。我想我必须确保第二个窗口File的所有者是MyDocument但是在NSWindowController中initWithWindowNibName:owner:我无法理解如何将MyDocument实例指定为所有者。仅在xib文件中指定它文件的所有者似乎还不够。

更新2

嗯......我开始认为我需要有两个NSWindowController实例,这两个实例都是由我的NSDocument子类实例化的(默认的MyDocument)。有了这些,可能两个NSWindowControllers都可以访问MyDocument.entries NSArray,两个windows xib文件将能够绑定到File的Owner.entries。

有人可以证实吗?谢谢。

1 个答案:

答案 0 :(得分:1)

我在这里回答了我自己的问题,基本上说我已经意识到我的要求非常依赖于文件所有者的约束。我实施的设计不正确,因此我正在重新设计它以实现我的目的。

无论如何,谢谢大家,即使没有答案也是答案:)