2010-03-07 36 views
9

我有排序NSTableColumn內容的問題。在我的NSTableView中有三列:文件,大小,路徑。內容存儲在NSMutableArray中。該數組中的每個對象都是一個包含三個鍵的NSDictionary:文件,大小和路徑 - 每個值都是NSString。排序NSTableColumn內容

在界面生成器中,在每個表格列的屬性中,我可以選擇排序選項: 選擇器:IB輸入「比較:」我認爲沒問題,因爲我比較NSStrings。 排序鍵 - 這就是我認爲的問題 - 我不知道該輸入什麼。

任何線索?如果您對我的代碼有疑問,請詢問。

回答

11

所以我找到了完整的解決方案。

首先,進入Interface Builder。選擇您想要排序的列。轉到列的檢查器,然後選擇第一個按鈕以查看「表列屬性」。設置適當的值(從字面上看,沒有「或」或@需要):

Sort key: file 

哪裏。‘文件’是內容在列中顯示的字典中的關鍵

Selector: compare: 

標準排序功能。

現在,在這裏保存所有更改,並跳轉到Xcode中,對類中的模型,在NSTableView的顯示的數據的來源你應該已經知道你需要兩個方法有:

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView 
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn 
*)tableColumn row:(NSInteger)row 

這兩個是需要符合NSTableDataSource非正式協議。你可以在MacDev中心閱讀它。

現在,所有你需要做的是增加一個新的方法:

-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors 

它可以包含一個非常簡單的代碼,會做的事:

-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors 
{  
    NSArray *newDescriptors = [tableView sortDescriptors]; 
    [results sortUsingDescriptors:newDescriptors]; 
    //"results" is my NSMutableArray which is set to be the data source for the NSTableView object. 
    [tableView reloadData]; 
} 

而這一切。它在我的應用程序中工作,希望它可以在你的情況下工作:D一切都應該自動工作。我剛剛保存了所有文件並構建了應用程序。它的工作。:)

網站,幫助我: CocoaDev: SortingNSTableView

+0

你救了我的一天! – 11684 2012-11-26 19:34:29

+0

不客氣! – 2012-11-27 14:32:53

+0

非常難以挽救我的生氣...... :) – 2013-11-03 18:19:46

2

鍵是key,您可以在字典中使用該鍵來檢索該值。

在你的情況下,你有三個鍵:文件,大小和路徑。 選擇您想要分類的那個。該鍵用於從每個要用於排序的記錄檢索值。

如果您的密鑰是@「文件」,@「大小」,@「路徑」,並且您想對file進行排序,則嘗試將value.file放入IB中的Sort Key字段。

使用將values插入到NSDictionary時使用的密鑰。

+0

感謝您的答覆,但我不瑟答案。 我看到這個窗口:http://homepage.mac.com/simx/.Pictures/column_attributes.png 我有一種感覺,它比在我的應用程序中添加一段代碼更容易。 你認爲我應該在'Sort Key'字段中輸入什麼內容? – 2010-03-08 00:34:01

+0

**編輯**:刪除了'confusing'代碼示例,它是向您展示它是如何在代碼中完成的,以便您看到IB值和代碼之間的連接。但看到它使事情複雜化,我將其刪除。所以現在應該清楚你應該在IB中插入什麼。 – stefanB 2010-03-08 01:29:21

+0

不工作。我也試過這些: - valueForKey:@「path」 - objectForKey:@「file」 - value.objectForKey:@「file」 無法正常工作..不知道該怎麼做。也許我應該創建一些綁定或什麼?從誰的角度來看,我應該寫這個鍵? – 2010-03-08 11:23:33