假设我有一个实体BikeRider
,其关系属性为helmets
。
我有一个数组控制器绑定到应用程序的托管对象上下文,实体设置为BikeRider
。有一张桌面视图列出了所有骑自行车的人。
然后,我有第二个数组控制器,绑定到应用程序的托管对象上下文,实体设置为Helmet
。此外,它与bikeRiderArrayController.selection
绑定。还有第二张桌面视图,列出了所选自行车骑手的所有头盔。
我还有两个用于添加和移除头盔的按钮。设置工作显然完美无瑕。
当然,除了一件小事:看起来-addHelmetsObject:
,-removeHelmetsObject:
,-addHelmets:
和-removeHelmets:
永远不会被调用。这意味着用于设置每个头盔的color
属性的观察的一些代码永远不会被调用。
我缺少什么?不是覆盖addHelmets:
等(通过适当的willChangeValueForKey:
等通知)正确的方式获得添加通知?
我真的必须 [self observeValueForKey:@"helmets". . .]
然后[oldValue minusSet:newValue]
,反之亦然,以确定添加或删除了哪些对象?我可以发誓这些方法在过去被正确调用了。也许设置的一些关键元素现在不同了。
答案 0 :(得分:1)
这从未通过NSArrayController正常工作。来自Apple's docs:
自定义关系集mutator方法不是由arraycontroller
调用的问题:您已为关系实现了set mutator方法,如“自定义多对多关系访问器”中所述 方法,“并绑定了一个contentSet绑定 NSArrayController实例有一个关系,但是设置了mutator 向对象添加对象和删除对象时,不会调用方法 来自阵列控制器。
原因:这是一个错误。
补救措施:您可以通过向contentSet绑定的关键路径添加self来解决此问题。例如,而不是绑定到[部门 对象控制器] .selection.employees,你会绑定到[部门 对象控制器] .selection.self.employees。