所有这些“NSOrderedSet后来被添加,因此不必与其他组件一起玩”错误让我发疯...
我有两个托管对象和它们之间有序的1:N关系,它由NSOrderedSet
的实例(或更精确的子类)支持。我想使用NSArrayController
来管理这种关系,以便从它提供的功能中获益(选择管理,内容绑定,绑定到NSTableView
等视图。)
由于NSOrderedSet
不是NSSet
的子类,contentSet
的{{1}}绑定不适用于该关系。我找到following thread并尝试实施那里提到的建议。
第一个建议是使用NSArrayController
绑定和值转换器将有序集转换为数组。此解决方案的问题是每次更改时内容的重新分配,这不是我想要的。
提到的主题中提供的第二个建议是使用contentArray
绑定并将contentArray
运算符应用于模型键路径。我试过了,但是当通过@array
添加/删除对象时,基本关系根本没有触及。
我发现的另一个选项是使用带有NSArrayController
绑定的排序描述符。这需要使关系无序,以使contentSet
绑定工作并引入特别用于管理订单的新属性。这还需要自定义订购机制来实现,并且搞乱模型。老实说,我想避免这个解决方案。
我的问题非常清楚:有没有办法使用contentSet
来管理有序的核心数据关系?如果是这样,哪种方法尽可能少引起疼痛?
答案 0 :(得分:10)
NSArrayController不支持有序关系确实令人非常难过。作为绑定技术的敏锐观察者,我发现苹果似乎没有说什么就“放弃”了它。 Apple引入的关于绑定的最后一个值得注意的变化是NSTreeController错误修复。那是我相信的10.6 / 10.7。苹果似乎不想再接触绑定技术了。我不知道为什么因为绑定有时真的很棒。它们可以是“90%解决方案”。在原型设计期间,这很好。我正在使用有意义的绑定,并且使用有序关系支持的NSArrayController会很棒。
已经提到的大多数解决方案都不是真正的解决方案。但这取决于。这是需要考虑的事情: