私は、メディア アイテムを記述する多くの MediaItem エンティティを含むコア データ ストアを持っています。また、多くの MediaItem と 1 対多の関係を持つ NewsItem もあります。ここまでは順調ですね。
ただし、MediaItems と 1 対多の関係を持つ PlayerItems と GalleryItems もあります。したがって、MediaItem はエンティティ間で共有されます。
多くのエンティティが 1 対多の関係を持つ可能性があることを考えると、MediaItem から、それと関係を持つエンティティのすべて (1 つ以上) への相互関係をどのように設定できますか?さらに、MediaItem を削除するルールを実装するにはどうすればよいですか?それらの相互関係の数が 0 になると?
記録のために(そしてそれが他の誰かに役立つ場合に備えて)、(最後と最後に名前が付けられた)とMediaLinkedEntity
1対多の関係を持つ抽象クラスを作成することでこれを解決しました。次に、このエンティティをおよびにサブクラス化し、 に次のメソッドを実装しました。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 ];
}
基本的に、以下のマーカスの回答に従います。