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

时间:2012-09-22 13:57:40

标签: iphone objective-c ios core-data object-graph

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

以下是我的设计:

  • 实体1:

类别(属性:categoryID,title,show,position)与新闻实体的关系称为“新闻”。

“新闻”关系的目的地是“新闻”,反向关系是“类别”,类型对多关系和删除规则是级联。

  • 实体2:

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

“类别”关系的目的地是“类别”,反向关系是“新闻”,类型对多关系和删除规则无效。

对象图如下所示:

新闻<<< -------------->>分类

我的问题是:

1> 我的设计模型是否合适?

2> 如果我从其上下文示例中删除了一个新闻对象,则对我设计的模型进行编码:

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

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

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

提前感谢。对不起英文不好

1 个答案:

答案 0 :(得分:1)

  1. 很难说这是否适合您的应用,但它看起来像一个非常标准的关系。

  2. 如果删除对象,则会自动从所有Core Data关系中删除该对象。不要担心对某些已删除对象的悬空引用,Core Data会为您处理。

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

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

      Core Data 'Data Model Inspector' Screenshot

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

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