我有一个Core Data商店,其中包含许多描述媒体项目的MediaItem实体。我也有NewsItems,它与许多MediaItems有一对多的关系。到目前为止一切都很好。
但是,我还有PlayerItems和GalleryItems,它们与MediaItems之间也有一对多的关系。因此,MediaItems是跨实体共享的。
鉴于许多实体可能具有一对多关系,我如何设置从MediaItem到与其有关系的所有(一个或多个)实体的互惠关系,此外,我如何实现规则当这些互惠关系的数量下降到0时删除MediaItem?
对于记录(如果它对其他人有用),我通过创建一个与MediaLinkedEntity
具有一对多关系的抽象MediaItems
类来解决这个问题(名为{{ 1}}位于MediaItems
端,MediaLinkedEntity
位于LinkedEntities
端。然后,我为MediaItem
和NewsItems
创建了此实体的子类,并在GalleryItems
中实现了以下-prepareForDeletion
方法:
MediaLinkedEntity
基本上,遵循马库斯的回答。
答案 0 :(得分:1)
对此最好的答案是拥有一个以通用方式处理关系的抽象父实体。这样可以减少模型中的关系数量。
对于删除规则,您应该为关系的“一”侧创建一个子类,并实现他们的-prepareForDeletion
方法来检查多方的孤立项,然后在它们发生时删除它们。
答案 1 :(得分:0)
但是,我还有PlayerItems和GalleryItems,它们与MediaItems之间也有一对多的关系。因此,MediaItems是跨实体共享的。
最简单但不那么漂亮的方法是为每个MediaItem关系创建反向关系。
另一种可能性是创建一个与MediaItem有关系的抽象父实体,并从该通用实体继承GalleryItem,NewsItems,PlayerItem。
鉴于许多实体可能具有一对多关系,我如何设置从MediaItem到与其有关系的所有(一个或多个)实体的互惠关系,此外,我如何实现规则当这些互惠关系的数量下降到0时删除MediaItem?
有几种方法可以创建此行为。 您可以使用KVO来观察MediaItem的所有反向关系