将有序关系与NSArrayController绑定

时间:2013-02-25 23:39:53

标签: cocoa core-data cocoa-bindings nsarraycontroller

如何将NSArrayController的内容绑定到有序多对多关系中的实体?

我的Core Data模型中有一个无序的to-many关系,以及一个NSArrayController,其内容集绑定到父实体的那个关系。这很好用,可以从NSArrayController访问数据,没问题。

我在开发期间决定允许用户手动重新排序这些子对象,因此我将关系更改为有序关系。现在,当我的笔尖创建我的NSArrayController时,会出现以下错误:

Cannot create NSSet from object Relationship '...' fault on managed object ... of class _NSFaultingMutableOrderedSet

实际上,我认为这一切都是有道理的:这是一种有序的关系,所以现在我得到一个有序的集合。将它绑定到Content Array也是不合适的,因为它现在是NSOrderedSet,而不是数组。我的问题是:现在如何将此关系的数据绑定回NSArrayController?

2 个答案:

答案 0 :(得分:10)

我在搜索时遇到了这个问题,看看这方面是否有任何新进展。在一个发货应用程序中,我目前将数组控制器的内容数组绑定到orderedSetKey.@array,它工作得很好,不确定我是否发现了自己或是否有其他人在某处建议它。

答案 1 :(得分:8)

基本问题是,按顺序排序的核心数据返回NSOrderedSet,而NSOrderedSet不是NSSet的子类。任何期望NSSet的阵列控制器绑定都将失败。

Tom Fewster有detailed blog post描述使用NSValueTransformer来解决这个缺点,即可在NSOrderedSet和NSArray之间进行转换。他还提供sample implementation on Github