我有一个核心数据存储,其中包含许多描述媒体项目的 MediaItem 实体。我也有 NewsItems,它与许多 MediaItems 具有一对多的关系。到现在为止还挺好。
但是,我也有 PlayerItems 和 GalleryItems,它们也与 MediaItems 具有一对多的关系。所以 MediaItems 是跨实体共享的。
鉴于许多实体可能具有一对多关系,我如何设置从 MediaItem 到与其有关系的所有(1 个或多个)实体的互惠关系,此外,我如何实施删除 MediaItem 的规则当这些互惠关系的数量下降到0?
作为记录(如果它对其他人有用),我通过创建一个与(在末尾和末尾命名)MediaLinkedEntity
具有一对多关系的抽象类来解决这个问题。然后我将此实体子类化为and并在中实现以下方法:MediaItems
MediaItems
MediaLinkedEntity
LinkedEntities
MediaItem
NewsItems
GalleryItems
-prepareForDeletion
MediaLinkedEntity
- (void)prepareForDeletion {
NSSet *mediaItems = self.MediaItems;
NSSet *linkedEntities;
// step through all media items we link to
for( MediaItem *mediaItem in mediaItems ){
linkedEntities = mediaItem.LinkedEntities;
if( [ linkedEntities count ] == 1 && [ linkedEntities containsObject: self ] ){
// if this MediaLinkedEntity is the only entry in the mediaItem's linked entities list, delete it.
[ mediaItem.managedObjectContext deleteObject: mediaItem ];
}
}
[ super prepareForDeletion ];
}
本质上,遵循下面马库斯的回答。