使用“无操作”删除规则&而是使用prepareForDeletion

时间:2012-09-27 15:15:01

标签: ios core-data nsmanagedobject

我目前有两个实体,一个类别实体和一个商品实体,其中Category:Item是1:m。

我已将“无操作”规则应用于类别 - >项目关系,并实现了Category.prepareForDeletion,以便在删除类别之前将类别中的所有项目移动到特殊的catch-all类别(catch-all类别不可删除)。

- (void)prepareForDeletion {
    Category *misc = [Database theMiscCategory];
    [misc addItems:self.items];
    [super prepareForDeletion];
}

我的问题是:我错过了什么吗?如果没有,我如何关闭“无操作”作为高级功能的XCode警告?

FTR,我没有使用nullify,因为它更方便应用程序的其他区域将内容转储到“misc”类别而不是处理具有null类别的项目。我确实尝试过这个,但是有一些意想不到的行为 - 如果我把调用放到超级优先,关系在我收集要更改的项目集之前无效,如果我把它放到那之后新的类别的关系得到了无效。我想我可以收集它们,然后调用super,然后设置新类别,但这看起来很笨拙。

所以我认为“No Action”就是我想要的,只是想确保我不会错过任何我应该在prepareForDeletion中管理的内容。

2 个答案:

答案 0 :(得分:1)

“无操作”产生警告的原因是管理CategoryItem之间的关系现在由您自己决定。

因此,如果您在Category中有myCategory名为myCategory.items且包含5个项目对象,并且您删除了myCategory,那么5 Item个对象仍会认为他们与myCategory的关系已被删除。

您最好的选择是将规则更改回“Nullify”,以便Core Data为您处理关系管理。您仍然可以在prepareForDeletion中执行您正在执行的操作,因为self.items此时仍然包含Item个对象。

如果由于某些其他原因必须保留“无操作”规则,则需要确保Item中的self.items .categoryprepareForDeletion属性设置为n { {1}}。

答案 1 :(得分:0)

所以,阅读和阅读之间浸泡时间,答案似乎很简单:是的,如果你有理由使用“nullify”,那么你需要做的是适当地实现prepareForDeletion以保持参照完整性。