繁体   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