1

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

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

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

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

FTR,我没有使用 nullify,因为它更方便应用程序的其他区域转储“杂项”类别中的内容,而不是处理具有 null 类别的项目。我最初确实尝试过,但是遇到了一些意外的行为-如果我首先调用 super ,则在我可以收集要更改的项目集之前,关系就被取消了,如果我把它放在之后,那么与新类别的关系就得到了作废。我想我可以收集它们,然后调用 super,然后设置新类别,但这似乎很笨拙。

所以我确实认为“无操作”是我想要的,只是想确保我没有遗漏我应该在 prepareForDeletion 中管理的任何其他内容。

4

2 回答 2

1

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

因此,如果您在 中Category调用myCategory了 5 个 Item 对象myCategory.items,并且您 delete myCategory,这 5 个Item对象仍会认为它们与myCategory已删除的关系有关系。

您最好的选择是将规则改回“Nullify”,让 Core Data 为您处理关系管理。你仍然可以做你正在做的事情,prepareForDeletion因为此时self.items仍然包含Item对象。

如果出于其他原因必须保持“无操作”规则,则需要确保每个Iteminself.items将其.category属性设置为 nil 期间prepareForDeletion

于 2012-09-27T16:35:31.667 回答
0

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

于 2012-10-24T02:41:38.370 回答