我的数据库有3个实体:照片,地点(拍摄照片的地方)和标签(照片)。
每张照片都与拍摄地点有关系。 每个地方都有一组照片。
每张照片都有一组标签,每个标签都有一组照片。这是一种多对多关系,因为一张照片可以有多个标签,而标签可以与多张照片相关联。
现在,我无法找出针对此行为的正确删除规则:
有什么建议吗?
答案 0 :(得分:2)
首先,标签不需要单独的属性来跟踪照片的数量。您可以查询该计数的关系。
其次,您需要在-prepareForDeletion
实体中设置一个Photo
,以检查它是否是唯一带有对该标记的引用的照片,如果是真的则删除它。
同样,当您删除照片时,在其-prepareForDeletion
中,您可以查看该地方有多少张照片并调用相同的逻辑。
在模型本身中,我会将删除规则设置为无效。
答案 1 :(得分:1)
所以,感谢Marcus,我已将所有删除规则设置为Nullify
,然后我在照片prepareForDeletion
中编写了此代码:
- (void)prepareForDeletion
{
//tag check: if this photo was the last associated with that tag, deletion !!
for (Tag *tag in self.tags) {
if ([tag.taggedPhotos count] == 1) {
[self.managedObjectContext deleteObject:tag];
} else {
tag.photoCount = [NSNumber numberWithInt:[tag.photoCount intValue]-1];
}
}
//place check: if this photo was the last associated with that place, deletion !!
if ([self.whereTaken.photos count] == 1) {
[self.managedObjectContext deleteObject:self.whereTaken];
}
}
我没有删除numberOfPhotosTagged
属性,因为我正在使用它来对标记进行排序。