2011-03-29 106 views
14

我有一個NSArrayController和一個NSTableView。他們顯示來自iTunes的曲目。我可以通過單擊標題對列表進行排序。排序支持NSArrayController NSTableView

是否有一種方法可以爲表視圖設置默認排序描述符,以便每次用戶啓動應用程序時都會對相冊進行排序?

我試着在數組控制器和表視圖上設置sortDescriptor,但是它什麼都不改變。

謝謝

編輯:答案是對的。但它需要一個的NSArray:

- (NSArray *)mainSortDescriptor { 

    return [NSArray arrayWithObjects: 
      [NSSortDescriptor sortDescriptorWithKey:@"album" ascending:YES], 
      [NSSortDescriptor sortDescriptorWithKey:@"trackNumber" ascending:YES], 
      nil]; 

}

回答

13

如果你想在陣列控制器的排序描述符綁定,你必須將其綁定到東西。你可以把這個應用程序中的代表,例如:

- (NSArray *)tracksSortDescriptors { 
    return [NSArray arrayWithObject: 
      [NSSortDescriptor sortDescriptorWithKey:@"albumName" 
              ascending:YES]]; 
} 

然後,您可以設置在IB的綁定,

 
Bind to: MyAppDelegate 
Model Key Path: tracksSortDescriptors 

編輯。當我從PyObjC翻譯這個時,我忘記了我正在返回一個列表。哎呀。

+0

那就對了。我嘗試了類似的東西,但沒有奏效。現在它可以工作。謝謝 – david 2011-04-07 14:10:58

+1

@Josh Caswell我得到以下錯誤:[ valueForUndefinedKey:]:這個類不是關鍵的值與密鑰tracksSortDescriptors兼容。 任何想法? – 2012-10-23 16:36:51

+0

@DomVinyard你已經綁定到視圖控制器,而不是應用程序委託。沒問題,只需在視圖控制器中實現方法'tracksSortDescriptors'。 – 2016-03-10 09:49:35

5

我試過這個,沒有完全奏效 - 在每個應用程序開始時使用,但不是在應用程序運行時。

最後,我注意到,在我的NSArrayController的對象,下面的盒子是取消選中(哎呀!):

「自動重新編排內容」

...所以,FYI的人誰具有同樣的問題:確保該框爲ON :)