簡體   English   中英

使用NSArrayController對NSTableColumn進行排序

[英]Sorting NSTableColumn with NSArrayController

我有一個NSArrayController綁定到NSTableView,所以表列如下所示:

NSTableView bindings:
Content -> ArrayController.arrangedObjects
SelectionIndexs -> ArrayController.arrangedObjects
SortDescriptors -> ArrayController.sortDescriptors

NSTableColumn bindings:
Value -> ArrayController.arrangedObjects.description

當我嘗試使用列標題對它進行排序時,它會崩潰,例如

error setting value for key path sortDescriptors of object NSArrayController

有任何想法嗎?

我今天正為同樣的問題而苦苦掙扎。

似乎將tableView的內容和selectionIndexes綁定到陣列控制器IB > inspector window > select your tableView > bindings tab ,可以通過單擊表頭來禁用排序。 這是有道理的,因為表格視圖現在向您顯示了陣列控制器的確切內容(和順序)。

我在IB中取消選中了這些綁定,還從表列IB > inspector window > select your NSTableColumn > attributes pane刪除了所有排序鍵。 選中表格列的綁定選項卡中的Creates Sort Descriptor復選框。 盡管我認為將表的sortDescriptor綁定到“ Shared User Defaults Controller可以節省您退出應用程序時的排序,但是表上不需要sortDescriptor。

如果需要對表進行排序,請將sortDescriptor放在數組控制器上,也許放在awakeFromNib

- (void)awakeFromNib {
    [super awakeFromNib];
    [self setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"propertyOfYourObject" ascending:YES selector:@selector(compare:)]]];
}

這不會影響單擊表列標題。

我無法在數組控制器上獲得sortDescriptor來處理綁定。

在您的綁定嘗試中,我看到了幾個問題。

  1. 通常不需要綁定NSTableView 將特定NSTableColumn的值綁定到NSArrayController就足夠了。

  2. 您嘗試將某些內容綁定到.description屬性。 請記住-“ 描述 ”就像是Obj-C中的“保留字”。 任何NSObject都應在其“ description”方法中以NSString出現。 當您在調試器中放置po <object>或通過“%@”將NSObject傳遞給NSLog時,這就是所謂的。 所以...可能您想將自己的屬性重命名為其他名稱。

  3. 您根本不需要綁定NSArrayControllerNSTableViewNSTableColumn的排序描述符。 碰巧,當你綁定一個NSTableColumn的價值, NSArrayControllerarrangedObjectsNSTableColumn (實際上是NSColumnHeader )對象知道所設置的NSArrayControllersortDescriptor為你列的值綁定指定一個相同的路徑-當您單擊列標題時。 換句話說,如果您僅將列的值綁定到NSArrayController的rangedObjects,則通過單擊列標題進行排序是免費的。

有關表綁定的文檔不好而且令人沮喪。 有多種使用表的方案,調試綁定問題是一個真正的噩夢。 但是,網上有很多文章和教程。

希望這可以幫助。

讓我建議您一個簡單的方法-

NSTableColumn bindings:

Value -> 

Bind to: ArrayController

Controller Key : arrangedObjects

Model Key Path : keyPath (such as name)

如果您不熟悉在表視圖中使用綁定,那么本文將對您有很大幫助-

編輯:項目搬遷到Github。 (沒有更多說明-僅代碼)

NSTableView,NSArrayController和更多綁定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM