1

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

下面是我的设计:

  • 实体 1:

类别(属性:categoryID、title、show、position)以及与 News Entity 的关系称为“news”。

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

  • 实体 2:

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

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

对象图如下所示:

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

我的问题是:

1> 我设计的模型好不好?

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

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

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

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

预先感谢。对不起英语不好

4

1 回答 1

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

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

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

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

      核心数据“数据模型检查器”截图

    • 在您的“新闻”子类中:如果您需要更细粒度的控制和/或错误报告,您可以在验证期间检查(以生成错误),或者在保存过程中采取一些自动操作。

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

于 2012-09-22T16:09:44.407 回答