2014-06-23 38 views
0

我用tableView創建了一個viewController,並將唯一列的標識設置爲「name」。然後我創建了一個arrayController,將它綁定到一個NSManagedObjectContext並設置正確的實體名稱。(OS X)以編程方式綁定NSTableView不顯示值

當我現在加載viewController時,tableView會顯示正確數量的行。但不幸的是,這些單元不包含name密鑰的值NSManagedObject

我必須在我的NSManagedObject子類或viewController(它是tableViews viewController)中實現什麼?

我想向您展示一些代碼,但我不知道這裏有什麼可以幫助的,因爲它更像是一個概念性問題......所以我會按照要求在註釋中發佈代碼。

UPDATE

這是我使用綁定arrayController壽的tableView代碼:

[_tableView bind:NSContentBinding toObject:_arrayController withKeyPath:@"arrangedObjects.name" options:nil]; 

要檢查的tableView得到什麼,我加入這一行(添加屬性調用後「content」):

[self bind:NSContentBinding toObject:_arrayController withKeyPath:@"arrangedObjects.name" options:nil]; 

在setter中,我得到了一個包含NSString實例的數組。但仍的tableView不顯示任何值...

+0

這是一個基於視圖的表格視圖嗎?單元格視圖包含哪些內容?它是一個純粹的'NSTextField'嗎?它是一個包含子視圖的NSTableCellView嗎?如果是這樣,它的'textField'插座是否連接到適當的子視圖?這是一個自定義視圖嗎? –

+0

現在。這是一個基於單元格的tableView。 –

回答

0

我終於用標準NSTableViewDataSource協議:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { 
    return [[_arrayController arrangedObjects] count]; 
} 
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 
    return [[[_arrayController arrangedObjects] objectAtIndex:row] valueForKey:[tableColumn identifier]]; 
} 

我覺得這是一個堅實的解決方案,但。我可能會被-bind:toObject:withKeyPath:options:想法所迷惑。

+1

使用數據源方法很好。綁定並不總是最好的技術。對於基於NSCell的表視圖,通常綁定表**列**,而表視圖本身根據列的綁定設置自己的綁定。 (您也可以自己綁定表格視圖,除了列,它允許您覆蓋或禁用某些自動行爲。) –

+0

感謝您的詳細評論。很好,這澄清了很多問題。 –

相關問題