我目前有两个实体,一个类别实体和一个商品实体,其中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中管理的内容。
答案 0 :(得分:1)
“无操作”产生警告的原因是管理Category
和Item
之间的关系现在由您自己决定。
因此,如果您在Category
中有myCategory
名为myCategory.items
且包含5个项目对象,并且您删除了myCategory
,那么5 Item
个对象仍会认为他们与myCategory
的关系已被删除。
您最好的选择是将规则更改回“Nullify”,以便Core Data为您处理关系管理。您仍然可以在prepareForDeletion
中执行您正在执行的操作,因为self.items
此时仍然包含Item
个对象。
如果由于某些其他原因必须保留“无操作”规则,则需要确保Item
中的self.items
.category
中prepareForDeletion
属性设置为n { {1}}。
答案 1 :(得分:0)
所以,阅读和阅读之间浸泡时间,答案似乎很简单:是的,如果你有理由使用“nullify”,那么你需要做的是适当地实现prepareForDeletion以保持参照完整性。