And*_*eis 3 cocoa objective-c associations bidirectional
我非常喜欢代码生成(来自UML)并且来自Java世界,我想知道如何在Objective-C中实现自动双向关联管理.
图像协会合作伙伴< - >地址,一对多,可从两端导航.我想要实现的是,如果我向合作伙伴附加地址,地址对象应该自动了解其合作伙伴.
所以实现模式是在Partner端有一个NSMutableArray*,在Address端有一个Partner*.地址侧的属性很容易实现,因为setPartner :( Partner*)aPartner可以自动将地址(self)插入到合作伙伴的管理地址的NSMutableArray中.然而,另一方面并不那么容易实施.Objective-C中to-many引用的标准实现模式似乎是通过@property的get方法可获得的NSMutableArray.拥有此NSMutableArray的对象然后可以将Address对象插入到数组中,这当然不会更新另一方.
我知道这种关联管理还有其他模式,例如,通过addTo ...()和removeFrom ...()方法.但我还不知道这是否符合Cocoa编程的其他原则,甚至阻止我有效地使用Cocoa.我在这里考虑Interface Builder.没有多少经验,但我看到了一个名为ArrayController的东西,它看起来非常方便,但似乎也期望使用NSMutableArray类型属性.如果这个人将对象插入到数组中,我需要拦截它并进行另一侧调整.
作为一名Java程序员,我现在倾向于子类化NSMutableArray并覆盖它的一些方法,然后可以操纵另一端.这有可能吗?我读到了类别,但到目前为止,我已经明白我只能通过这种方式向类中添加方法,而不是覆盖它们,也不会添加到它的结构中.或者它应该是方法转发?我现在很困惑.如果你能指出我正确的思考方向,那就太棒了.非常感谢!
欢迎来到可可.不要子类化内置集合.你会疯了.
请允许我澄清一下:在Cocoa中,我们将这些东西称为"Class Clusters".集群是私有类的层次结构,它们都具有公共的超类.在这种情况下,NSArray是公共超类,并且有私有子类是实际的数组实现.这在子类化时提出了一个非常困难的挑战,因为您不知道需要子类化的类(或类).
常见的解决方法是创建一个NSObject"包装"的新子类NSArray(即,它将数组作为实例变量["field"]),然后在自定义包装器上调用方法,并且包装器保存所有您需要的自定义逻辑.
至于回答你的问题,我发现当我有这种设置需要自动维护一对一,一对多或多对多的关系时,没有什么可以使用的CoreData.CoreData是一个内置框架,或多或少像一个对象存储.它所做的真正令人敬畏的事情之一是处理关系完整性,这正是您正在寻找的.
| 归档时间: |
|
| 查看次数: |
731 次 |
| 最近记录: |