2011-03-29 76 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 :)

相关问题