1

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

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

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

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

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

我错过了什么?是否覆盖addHelmets:et al(带有适当的willChangeValueForKey:et al 通知)是获取添加通知的正确方法?

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

4

1 回答 1

1

这从未通过 NSArrayController 正常工作。来自Apple 的文档

数组控制器不调用自定义关系集修改器方法

问题:您已经为“自定义对多关系访问器方法”中描述的关系实现了 set mutator 方法,并将 NSArrayController 实例的 contentSet 绑定绑定到关系,但是当您添加对象时不会调用 set mutator 方法从阵列控制器中删除对象。

原因:这是一个错误。

补救措施:您可以通过将 self 添加到 contentSet 绑定的键路径来解决此问题。例如,您将绑定到 [Department Object Controller].selection.self.employees,而不是绑定到 [Department Object Controller].selection.employees。

于 2013-04-09T01:22:10.063 回答