我在努力嘗試執行我認爲會是相對常見的任務。我有一個NSTableView
,它通過NSArrayController
綁定到它的數組。陣列控制器將其內容設置爲NSMutableArray
,其中包含一個或多個NSObject
模型類的實例。我不知道該怎麼做的是以一種對綁定友好的方式在NSCell
子類中公開模型。在NSTableView的自定義NSCell中使用綁定來暴露模型對象
爲了便於說明,我們會說對象模型是由名字,姓氏,年齡和性別組成的人。因此,模型會出現如下所示:
@interface PersonModel : NSObject {
NSString * firstName;
NSString * lastName;
NSString * gender;
int * age;
}
很明顯,適當的setter,getters init等等等級的類。
在我的控制器類我定義一個NSTableView
,NSMutableArray
和NSArrayController
:
@interface ControllerClass : NSObject {
IBOutlet NSTableView * myTableView;
NSMutableArray * myPersonArray;
IBOutlet NSArrayController * myPersonArrayController;
}
使用界面生成器,我可以很容易地綁定模型到相應的列:
myPersonArray --> myPersonArrayController --> table column binding
該作品精細。所以我刪除了多餘的列,留下了一個與NSArrayController
綁定的列(這會創建並保持每行與NSArrayController
之間的關聯),這樣我就可以看到我的NSTableView
中的一個可見列和一個隱藏列。我創建了一個NSCell
子類,並將相應的繪製方法創建爲單元格。在我awakeFromNib
我建立自定義NSCell
子類:
MyCustomCell * aCustomCell = [[[MyCustomCell alloc] init] autorelease];
[[myTableView tableColumnWithIdentifier:@"customCellColumn"]
setDataCell:aCustomCell];
這也能正常工作從圖形的角度。我得到我的自定義單元格顯示在列中,並重復我的數組控制器中的每個託管對象。如果我添加一個對象或從數組控制器中刪除一個對象,表格會相應地更新。
但是......我的印象是,我的PersonModel
對象可以在我的NSCell
子類中使用。但我不知道如何去實現它。我不想使用setter和getter來設置每個NSCell
,因爲那麼我通過將數據存儲在NSCell
而不是從陣列控制器中引用數據來打破整個模型概念。
是的,我確實需要有一個自定義NSCell
,所以有多列不是一個選項。從哪裏來?
除了谷歌和StackOverflow搜索,我已經完成了蘋果公司文檔的必要步驟,似乎沒有找到答案。我發現很多參考文獻都是圍繞着布什打的,但沒有涉及NSArrayController
。綁定到模型實體的其他元素(例如主/細節場景)時,控制器使生活變得非常簡單。我在使用核心數據時也發現了很多引用(雖然沒有答案),但是我沒有使用核心數據。
根據規範,我非常感謝任何可以提供的援助!
這是輝煌的。我一直在與一個實施怪物一段時間掙扎,只有一個醜陋的弗蘭肯斯坦爲它展示。儘管我使用的是CoreData對象,但我認爲這是一個優雅的解決方案。 – 2010-05-13 16:45:56
@Greg - 很高興我可以爲您服務!在我想出一個解決方案之前,我已經把頭繞在這個問題上了好幾天了! – Hooligancat 2010-05-27 15:56:47