从具有多对多关系核心数据iOS的上下文中删除nsmanagedboject

Posted

技术标签:

【中文标题】从具有多对多关系核心数据iOS的上下文中删除nsmanagedboject【英文标题】:Delete nsmanagedboject from context with many to many relationship core data iOS 【发布时间】:2012-09-22 13:57:39 【问题描述】:

我的模型有 2 个具有多对多关系的实体(类别和新闻):(这意味着一个类别可能有很多新闻,而一篇新闻文章可能属于一个或多个类别)。

以下是我的设计:

实体 1:

类别(属性:categoryID、标题、节目、位置)与新闻实体的关系称为“新闻”。

“news”关系的destination是“News”,反向关系是“categories”,类型对多关系,删除规则是级联的。

实体 2:

新闻(属性:newsID、报价、内容、链接)与名为“类别”的类别实体的关系。

“categories”关系有destination为“Category”,反向关系为“news”,类型对多关系,删除规则为nullify。

对象图如下所示:

新闻>分类

我的问题是:

1> 我设计的模型好吗?

2> 编码到我设计的模型,如果我从中删除新闻对象上下文示例,如:

id newsObjectToDelete = .... [managedObjectContext deleteObject:newsObjectToDelete];

newsObjectToDelete 所属的 Category 对象是否会自动从关系“News”的 NSSet 中删除 newsObjectToDelete。

3> 如果我想限制“新闻”必须属于至少一个“类别”。如何实现该约束

提前致谢。对不起英语不好

【问题讨论】:

【参考方案1】:

    很难说这是否适合您的应用程序,但它看起来是一种非常标准的关系。

    如果您删除一个对象,它会自动从所有 Core Data 关系中删除。不用担心对某个已删除对象的悬空引用,Core Data 会为您处理。

    Core Data 实际上只能生成错误(并阻止保存)或在保存期间采取一些自动操作。您可以执行以下任一操作:

    在您的数据模型中:使用数据模型编辑器,取消选中此关系的“可选”,和/或将“最小”计数设置为 1:

    在您的“新闻”子类中:如果您需要更细粒度的控制和/或错误报告,您可以在validation 期间进行检查(以生成错误),或者可能采取一些自动操作during the save process。

    请注意,使用验证(无论是在模型中还是在您的代码中)只会在开发和调试过程中有所帮助 - 在托管对象上下文上调用 -save: 将失败,返回 NO 并生成错误。这应该是最后的手段,实际上只是为了防止不良数据进入您的持久存储。像这样的验证失败会告诉您代码的某些其他部分是错误的并生成了错误的对象。

【讨论】:

:谢谢!这真的很有帮助:D

以上是关于从具有多对多关系核心数据iOS的上下文中删除nsmanagedboject的主要内容,如果未能解决你的问题,请参考以下文章

通过 HTTP 导入核心数据,具有多对多关系

将对象添加到具有多对多关系的核心数据中的 NSSet

核心数据多对多关系的正确删除规则?

如何在 iOS 中建立多对多关系? (核心数据)

核心数据。加入 2 个具有多对多关系的表?

具有多对多关系的核心数据 NSPredicate