Cocoa NSArrayController如何对多对多关系进行排序?

Cocoa NSArrayController如何对多对多关系进行排序?,cocoa,core-data,cocoa-bindings,nsarraycontroller,Cocoa,Core Data,Cocoa Bindings,Nsarraycontroller,使用CoreData,我有一个实体“Bookmark”,它与另一个实体“Tag”有一个名为“tags”的对多关系,还有一些common属性(字符串、日期等) 在NSTableView中,我们通过绑定显示书签实体: NSArrayController绑定到文件的Owner.managedObjectContext (标准XCode CoreData模板,managedObjectContext位于AppDelegate中) TableView中的列绑定到各自的属性。特别是,Tag列通过NSVal

使用CoreData,我有一个实体“Bookmark”,它与另一个实体“Tag”有一个名为“tags”的对多关系,还有一些common属性(字符串、日期等)

在NSTableView中,我们通过绑定显示书签实体:

  • NSArrayController绑定到文件的Owner.managedObjectContext (标准XCode CoreData模板,managedObjectContext位于AppDelegate中)
  • TableView中的列绑定到各自的属性。特别是,Tag列通过NSValueTransformer的子类绑定到此arrayController.arrangedObjects.tags,以便我们可以将to-many关系的摘要显示为NSString
它起作用了。现在,当我单击列标题时,整个表视图得到了正确的排序,除了“tag”列,我在该列中得到:

-[_NSFaultingMutableSet compare:]: unrecognized selector sent to instance
请确保此对多关系中的“Set”不会响应选择器“compare:”

问题: 我怎样才能做到这一点?如何对一对多关系进行排序


有类似ValueTransformer的产品吗?如果我可以提供一个自定义类来进行比较:为了让ArrayController知道…

一个可能的问题:由于\n NSFaultingMutableSet是一个NSSet,我们可以通过一个类别添加选择器“compare:”

@interface NSSet (someAdditions)
   - (NSComparisonResult)compare:(NSSet *)anotherSet;
@end

@implementation NSSet (someAdditions)
   - (NSComparisonResult)compare:(NSSet *)aSet {
      ...  
   }
@end
我们现在可以根据需要实现这个compare:selector,比如比较每个集合的计数,或者以某种方式比较它们的NSString表示

它在我的应用程序中工作。我在NSTableColumn的绑定上重新启用了“创建排序描述符”,现在可以单击我的tableView的标题进行排序

这是一个黑客,因为它影响所有NSSet。。。但至少我有我的钩子


您觉得怎么样?

在iOS 5和Mac OS X 10.7中,我们已经订购了许多关系。它不使用NSSet,而是使用SensorDeredSet。唉,它需要最新版本(我运行的是10.6)。除此之外,我已经在另一台机器上试用了10.7,但我无法在几个小时内使其正常工作。。。