首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSArrayController对NSTableColumn进行排序

使用NSArrayController对NSTableColumn进行排序
EN

Stack Overflow用户
提问于 2011-10-24 23:29:46
回答 3查看 2.6K关注 0票数 3

我有一个绑定到NSTableView的NSArrayController,所以表列如下所示:

代码语言:javascript
复制
NSTableView bindings:
Content -> ArrayController.arrangedObjects
SelectionIndexs -> ArrayController.arrangedObjects
SortDescriptors -> ArrayController.sortDescriptors

NSTableColumn bindings:
Value -> ArrayController.arrangedObjects.description

当我尝试使用列标题对它进行排序时,它就崩溃了,并显示以下内容

代码语言:javascript
复制
error setting value for key path sortDescriptors of object NSArrayController

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-24 23:45:26

让我向你推荐一个简单的方法-

代码语言:javascript
复制
NSTableColumn bindings:

Value -> 

Bind to: ArrayController

Controller Key : arrangedObjects

Model Key Path : keyPath (such as name)

如果您不熟悉在表视图中使用绑定,本文将对您有很大的帮助-

编辑:重新定位到Github的项目。(没有更多解释-仅代码)

NSTableView, NSArrayController and More Bindings

票数 0
EN

Stack Overflow用户

发布于 2012-03-22 22:30:20

我今天遇到了完全相同的问题。

似乎将tableView的内容和selectionIndexes绑定到数组控制器IB > inspector window > select your tableView > bindings tab,会通过单击表标题来禁用排序。这是有意义的,因为表视图现在显示了数组控制器的确切内容(和排序)。

我在IB中取消选中这些绑定,还从表列IB > inspector window > select your NSTableColumn > attributes pane中删除了所有排序关键字。选中表列的binding选项卡中的复选框Creates Sort Descriptor。表上不需要sortDescriptor,尽管我认为将表的sortDescriptor绑定到Shared User Defaults Controller可以在您退出应用程序时节省排序。

如果您需要对表进行排序,请在数组控制器上放置一个sortDescriptor,可能是在awakeFromNib中。

代码语言:javascript
复制
- (void)awakeFromNib {
    [super awakeFromNib];
    [self setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"propertyOfYourObject" ascending:YES selector:@selector(compare:)]]];
}

这不会影响单击表列标题。

我无法在数组控制器上使用sortDescriptor来处理绑定。

票数 4
EN

Stack Overflow用户

发布于 2014-12-02 03:49:45

我在您的绑定尝试中看到了几个问题。

  1. One通常根本不需要绑定NSTableView。将特定NSTableColumn%s的值绑定到NSArrayController就足够了。
  2. 您尝试将某些内容绑定到.description属性。请记住-- "description“就像Obj-C中的”保留字“。任何描述都应该在其“NSObject”方法中以NSString的形式出现。这是当您在调试器中使用po <object>,或者通过"%@“将NSObject传递给NSLog时所调用的。所以..。您可能希望将属性重命名为其他名称。
  3. ,您根本不需要绑定NSArrayControllerNSTableViewNSTableColumn的排序描述符。碰巧,当您将NSTableColumn的值绑定到NSArrayControllerarrangedObjects时,NSTableColumn (实际上是NSColumnHeader)对象知道将NSArrayControllersortDescriptor设置为与您为列值绑定指定的路径相同的路径-当您单击列标题时。换句话说,如果您只是将列的值绑定到NSArrayController的arrangedObjects,则通过单击列标题进行排序是免费的。

关于表绑定的文档既糟糕又令人沮丧。使用Table有几种不同的方案,调试绑定问题是一场真正的噩梦。然而,网上有很多关于这方面的文章和教程。

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7878048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档