我非常喜欢代码生成(来自 UML)并且来自 Java 世界,我想知道如何在 Objective-C 中实现自动双向关联管理。
图像关联合作伙伴 <-> 地址,一对多且可从两端导航。我想要实现的是,如果我将地址附加到合作伙伴,地址对象应该自动知道它的合作伙伴。
所以实现模式是在 Partner 端有一个 NSMutableArray*,在 Address 端有一个 Partner*。Address 端的属性很容易实现,因为 setPartner:(Partner*)aPartner 可以自动将 Address (self) 插入到管理地址的 Partner 的 NSMutableArray 中。然而,另一方面,实现起来并不容易。Objective-C 中多引用的标准实现模式似乎是可通过 @property 的 get 方法获得的 NSMutableArray。然后拥有这个 NSMutableArray 的对象可以将 Address 对象插入到数组中,这当然不会更新另一端。
我知道这种关联管理还有其他模式,例如,通过 addTo...() 和 removeFrom...() 方法。但我还不知道这是否符合 Cocoa 编程的其他原则,甚至会阻止我有效地使用 Cocoa。我在这里考虑界面生成器。没有太多经验,但我见过一个叫做 ArrayController 的东西,它看起来很方便,但似乎也期望 NSMutableArray 类型的属性可以使用。如果这个人将对象插入到数组中,我需要拦截它并进行另一侧调整。
作为一名 Java 程序员,我现在倾向于继承 NSMutableArray 并覆盖它的一些方法,然后这些方法可以操纵另一端。这可能吗?我阅读了有关类别的内容,但到目前为止,我了解到我只能以这种方式将方法添加到类中,而不能覆盖它们,也不能添加到它的结构中。还是应该是方法转发?我现在很困惑。如果你能指出我正确的思考方向,那就太好了。非常感谢!