Core data 核心数据反向关系和删除未使用的对象

Core data 核心数据反向关系和删除未使用的对象,core-data,cascading-deletes,inverse,Core Data,Cascading Deletes,Inverse,我有一个与此类似的核心数据模型: 保存Webgallery或文章对象时,可能会使用一张或多张图片。他们可以使用相同的拍摄对象,但尺寸可能不同。我不会保存在网络画廊或文章中都无法使用的图片 Picture的关系实例和社会对象设置为级联,因此当Picture对象被删除时,相应的PictureInstance和社会对象也会被删除 1) 有没有办法知道一张图片什么时候不再被使用,无论是通过网络画廊还是通过文章,这样它就可以被删除 2) previewPicture和StraterPicture之间的关

我有一个与此类似的核心数据模型:

保存Webgallery或文章对象时,可能会使用一张或多张图片。他们可以使用相同的拍摄对象,但尺寸可能不同。我不会保存在网络画廊或文章中都无法使用的图片

Picture的关系实例和社会对象设置为级联,因此当Picture对象被删除时,相应的PictureInstance和社会对象也会被删除

1) 有没有办法知道一张图片什么时候不再被使用,无论是通过网络画廊还是通过文章,这样它就可以被删除


2) previewPicture和StraterPicture之间的关系没有反向关系,这是一个问题吗?

您应该为关系设置反向关系。反之,问题就变得无关紧要了。当一个简单的级联规则将它们从WebGallery和文章中删除时。(或者你可能只是想使其无效)

您通常应该在两个方向上对关系进行建模,并适当地指定反向关系。Core Data使用此信息确保在进行更改时对象图的一致性(请参阅“操纵关系和对象图完整性”)。有关不希望在两个方向上建立关系模型的一些原因,以及如果不这样做可能会出现的一些问题的讨论,请参阅“单向关系”

(核心数据编程指南)

您只需在从图库或文章中删除图片时检查是否使用了该图片:

[gallery removePictureObject:pictureToRemove];
if (pictureToRemove.galleries.count == 0 && pictureToRemove.articles.count == 0) {
    [managedObjectContext deleteObject:pictureToRemove];
}

出于好奇,您为什么没有反向?因为可能有10个其他实体类似于WebGallery或Article,但大多数情况下只有一个反向不会为空。那么您如何设置删除规则?我可以自动删除未使用的图片吗?您可以在从web库或文章中删除图片时进行检查。请参阅我的编辑。