核心数据:“ - add <relationshipkey>对象:”未调用</relationshipkey>

时间:2013-04-08 22:24:00

标签: macos core-data

假设我有一个实体BikeRider,其关系属性为helmets

我有一个数组控制器绑定到应用程序的托管对象上下文,实体设置为BikeRider。有一张桌面视图列出了所有骑自行车的人。

然后,我有第二个数组控制器,绑定到应用程序的托管对象上下文,实体设置为Helmet。此外,它与bikeRiderArrayController.selection绑定。还有第二张桌面视图,列出了所选自行车骑手的所有头盔。

我还有两个用于添加和移除头盔的按钮。设置工作显然完美无瑕。

当然,除了一件小事:看起来-addHelmetsObject:-removeHelmetsObject:-addHelmets:-removeHelmets:永远不会被调用。这意味着用于设置每个头盔的color属性的观察的一些代码永远不会被调用。

我缺少什么?不是覆盖addHelmets:等(通过适当的willChangeValueForKey:等通知)正确的方式获得添加通知?

我真的必须 [self observeValueForKey:@"helmets". . .]然后[oldValue minusSet:newValue],反之亦然,以确定添加或删除了哪些对象?我可以发誓这些方法在过去被正确调用了。也许设置的一些关键元素现在不同了。

1 个答案:

答案 0 :(得分:1)

这从未通过NSArrayController正常工作。来自Apple's docs

  

自定义关系集mutator方法不是由arraycontroller

调用的      

问题:您已为关系实现了set mutator方法,如“自定义多对多关系访问器”中所述   方法,“并绑定了一个contentSet绑定   NSArrayController实例有一个关系,但是设置了mutator   向对象添加对象和删除对象时,不会调用方法   来自阵列控制器。

     

原因:这是一个错误。

     

补救措施:您可以通过向contentSet绑定的关键路径添加self来解决此问题。例如,而不是绑定到[部门   对象控制器] .selection.employees,你会绑定到[部门   对象控制器] .selection.self.employees。