2

我試圖將我的NSArraycontroller綁定到NSMutableArray;該數組包含「iData」類型的對象(這是一個自定義類)。該類還包含一些NSMutableString變量,這些變量被設置爲KVC的鍵。然後我將我的NSTableColumn綁定到NSArrayController,並分別設置每列的關鍵模型路徑。如何在填充與之關聯的NSMutableArray(綁定)時刷新NSTableVIew

當我嘗試填充數組時,GUI不顯示任何內容。我忘了什麼?

+1

你是如何填充你的數組? 。如果你通過arrayController填充數組,那麼你不會得到一個自動更新。 – 2010-10-29 07:51:10

+0

我通過NSMutableArray填充數組,但我不知道如何通過NSArrayController填充數組,因爲我的Controller.m類中沒有實例。請告訴我如何解決這個問題。 – Omayr 2010-10-29 07:57:30

+0

我已經拖動我的mainmenu.nib托盤中的NSController實例。我是否需要在Controller.h文件中聲明一個IBOutLet NSArrayController,然後將其與托盤中的NSArrayController實例連接起來? – Omayr 2010-10-29 08:15:17

回答

12

所以,很可能你早就解決了這個,但在碰到這個問題的情況下別人絆...

我通過NSMutableArray填充數組,但我不知道我怎麼能填充數組通過NSArrayController,因爲我的Controller.m類中沒有實例。請告訴我如何解決這個問題。

這可能是你在做類似

[myData addObject:someObject]; 

然而,你NSArrayController不會學習這種變化的NSMutableArray實例,因爲addObject不兼容KVC。您需要通知任何觀察到您的實例已更改的對象。至少有兩種方法可以做到這一點。假設你NSMutableArray實例屬性名爲「myData的」,那麼你可以做類似如下:

[self.willChangeValueForKey:@"myData"]; 
[myData addObject:someObject]; 
[self.didChangeValueForKey:@"myData"]; 

NSMutableArray *bindingsCompliantArray = [self mutableArrayValueForKey:@"myData"]; 
[bindingsCompliantArray addObject:someObject]; 

Another SO answer(鏈接)有什麼mutableArrayValueForKey實際上做了很好的解釋,但我建議閱讀關於鍵值編碼和鍵值觀察的Apple開發人員文檔,以幫助理解它。

我在mainmenu.nib托盤中拖動了NSController實例。我是否需要在Controller.h文件中聲明一個IBOutLet NSArrayController,然後將其與托盤中的NSArrayController實例連接起來?

你在你的筆尖文件需要一個NSArrayController實例,但你並不需要一個IBOutlet在您的界面,你在這裏所描述的情況。 NSArrayController應該綁定到你的NSMutableArray(在我的例子中是myData)的密鑰,這聽起來像你已經有正確綁定你的表列。