我有一个绑定到NSTableView的NSArrayController,所以表列如下所示:
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有什么想法吗?
发布于 2011-10-24 23:45:26
让我向你推荐一个简单的方法-
NSTableColumn bindings:
Value ->
Bind to: ArrayController
Controller Key : arrangedObjects
Model Key Path : keyPath (such as name)如果您不熟悉在表视图中使用绑定,本文将对您有很大的帮助-
编辑:重新定位到Github的项目。(没有更多解释-仅代码)
发布于 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中。
- (void)awakeFromNib {
[super awakeFromNib];
[self setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"propertyOfYourObject" ascending:YES selector:@selector(compare:)]]];
}这不会影响单击表列标题。
我无法在数组控制器上使用sortDescriptor来处理绑定。
发布于 2014-12-02 03:49:45
我在您的绑定尝试中看到了几个问题。
NSTableView。将特定NSTableColumn%s的值绑定到NSArrayController就足够了。NSString的形式出现。这是当您在调试器中使用po <object>,或者通过"%@“将NSObject传递给NSLog时所调用的。所以..。您可能希望将属性重命名为其他名称。NSArrayController或NSTableView或NSTableColumn的排序描述符。碰巧,当您将NSTableColumn的值绑定到NSArrayController的arrangedObjects时,NSTableColumn (实际上是NSColumnHeader)对象知道将NSArrayController的sortDescriptor设置为与您为列值绑定指定的路径相同的路径-当您单击列标题时。换句话说,如果您只是将列的值绑定到NSArrayController的arrangedObjects,则通过单击列标题进行排序是免费的。关于表绑定的文档既糟糕又令人沮丧。使用Table有几种不同的方案,调试绑定问题是一场真正的噩梦。然而,网上有很多关于这方面的文章和教程。
希望这能有所帮助。
https://stackoverflow.com/questions/7878048
复制相似问题