2013-06-01 71 views
0

蘋果公司的資源節目指南(RPG)指出:「這是更好地跨越多個筆尖文件分發組件。」 ......跨兩個nib(xib)文件鏈接的nsobject控制器。聲明筆尖實例

因此

, 我有一個準窗口筆尖(筆尖2)具有nsobjectcontroller需要將其鏈接(選擇自我)到主文檔窗口nib(Nib 1)中的nsarraycontroller。

我需要共享一個公共實例(nib 1中的nsarraycontroller或nib2中的nsobjectcontroller)。我可以在Nib 1中添加一個自定義對象,並將該文件的所有者設置爲該類型的自定義對象。但是,每個nib都會實例化它們自己的實例。

是否有一種方法來設置對象實例化哪個nib或聲明外部引用。

我還「讓文件的所有者成爲nib文件之外的任何單點聯繫人」(RPG)。這是一個NSWindowController。

在此先感謝。

回答

0

您可能想讓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訪問它。

相關問題