[英]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來處理綁定。
在您的綁定嘗試中,我看到了幾個問題。
通常不需要綁定NSTableView
。 將特定NSTableColumn
的值綁定到NSArrayController就足夠了。
您嘗試將某些內容綁定到.description屬性。 請記住-“ 描述 ”就像是Obj-C中的“保留字”。 任何NSObject都應在其“ description”方法中以NSString
出現。 當您在調試器中放置po <object>
或通過“%@”將NSObject
傳遞給NSLog時,這就是所謂的。 所以...可能您想將自己的屬性重命名為其他名稱。
您根本不需要綁定NSArrayController
或NSTableView
或NSTableColumn
的排序描述符。 碰巧,當你綁定一個NSTableColumn
的價值, NSArrayController
的arrangedObjects
的NSTableColumn
(實際上是NSColumnHeader
)對象知道所設置的NSArrayController
的sortDescriptor
為你列的值綁定指定一個相同的路徑-當您單擊列標題時。 換句話說,如果您僅將列的值綁定到NSArrayController的rangedObjects,則通過單擊列標題進行排序是免費的。
有關表綁定的文檔不好而且令人沮喪。 有多種使用表的方案,調試綁定問題是一個真正的噩夢。 但是,網上有很多文章和教程。
希望這可以幫助。
讓我建議您一個簡單的方法-
NSTableColumn bindings:
Value ->
Bind to: ArrayController
Controller Key : arrangedObjects
Model Key Path : keyPath (such as name)
如果您不熟悉在表視圖中使用綁定,那么本文將對您有很大幫助-
編輯:項目搬遷到Github。 (沒有更多說明-僅代碼)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.