对NSOutlineView中绑定到NSTreeController的列进行排序

时间:2011-08-23 02:24:29

标签: objective-c cocoa sorting nsoutlineview

我有NSOutlineView绑定到NSTreeController。 在“接口”构建器中,我已使用Controller键“NSOutlineView”将每个arrangedObjects列绑定到树控制器,并将模型键路径作为实体属性或实体类中的方法。

现在除了一个特殊列之外,所有其他列的排序都很完美。特殊列具有绑定到我的Entity类中声明的方法的模型键路径。此方法取决于我的代码中的某些条件,将返回NSStringNSDictionary。 当它返回NSDictionary时,委托方法:

- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item 

解析NSDictionary并返回该单元格的double值。另请注意,此案例中的单元格派生自NSCell并显示进度条。

简而言之,我的特殊列将根据情况显示进度条和字符串的混合。

我想实现排序,以便所有进度条保持在一起,字符串按字母顺序排序。

3 个答案:

答案 0 :(得分:0)

如果您尝试将table column's sort descriptor设置为您使用比较器查看对象类的描述符,那么您可能会有一些运气。 (您也可以尝试使用“class”键填写IB中的“Sort Key”,但我认为这可能不太可能起作用......)

答案 1 :(得分:0)

我自己找到了解决方案,并在发布查询后仅2分钟:)解决方案是在IB中添加自定义排序键,并在我的Entity类中定义一个返回NSInteger的键名方法。因为我希望所有NSDictionary对象保持在一起并且所有NSStrings都要排序,所以我根据对象类型返回适当的整数。 请注意,任何可能因排序无法工作的人:确保在IB中启用了对sortDescriptor的绑定。

答案 2 :(得分:0)

NSSortDescriptor *sorter = [[[NSSortDescriptor alloc]
                                 initWithKey:NULL
                                 ascending:YES
                                 selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];
[[myOutlineView tableColumnWithIdentifier:@"Name"]setSortDescriptorPrototype:sorter];