您可能想讓NIB1的所有者負責實例化NIB2。這將允許它成爲兩個NIB的所有者。在通常情況下,它可能是這個樣子:
// In the interface...
@property (nonatomic, readwrite, retain) NSArray* nib2TopLevelObjects;
// In the implementation...
- (void)awakeFromNib
{
NSNib* nib2 = [[[NSNib alloc] initWithNibNamed: @"NIB2" bundle: [NSBundle mainBundle]] autorelease];
NSArray* tlo = nil;
[nib2 instantiateWithOwner: self topLevelObjects: &tlo];
self.nib2TopLevelObjects = [tlo retain];
// Do other stuff...
}
- (void)dealloc
{
[_nib2TopLevelObjects release];
[super dealloc];
}
在本月底,NIB2將被實例化NIB1的所有者,因爲它的主人的歡迎,並NIB2將已插它的對象到共享所有者(請務必不要將東西插入兩個NIB的相同插座。)
所有這一切說,我不確定這一定是在這裏使用的正確模式。如果這兩個窗口都是同一個文檔的兩個視圖,則應該爲每個窗口創建一個NSWindowController子類並覆蓋-[NSDocument makeWindowControllers]
以實例化它們。 (NSWindowController將成爲每個NIB的「文件所有者」。)讓文檔NIB的所有者成爲NSDocument子類是簡單情況的「捷徑」。一旦你需要多個窗口,NSWindowControllers是要走的路。
每個NSWindowController都可以通過-document
返回文檔,並且NSDocument子類可以協調不同NSWindowControllers之間的狀態。這是一個更簡潔的方法,並避免與重挫IBOutlets所有有心計,等
針對您的特殊情況下,我可以看到在-makeWindowControllers
具有類似於sharedArrayController
在NSDocument子類,會從NIB1 NSArrayController的屬性,並重新發布它。然後,您可以通過綁定到文件所有者>document.sharedArrayController.selection
從NIB2訪問它。