1

在我的CoreData数据模型中,有一个Note实体,一个Tag实体,它们之间有多对多的关系,所以每个Note可以有很多Tag,每个Tag可能属于很多Note。

标签以逗号分隔的字符串形式输入:cat、dog、pig

然后我将字符串拆分为“猫”、“狗”、“猪”

假设我有一个带有标签'cat','dog','pig'的便笺,并且我删除了'pig'并添加了'bird',首先我有一个字符串:“cat,dog,bird”然后是“cat” , '狗', '鸟',

现在我该怎么办?我应该删除此注释的所有标签并重新添加所有标签吗?但是一旦我删除了所有标签,共享相同标签的其他笔记会丢失这些标签吗?

谢谢!

4

1 回答 1

3

您将删除对象与从关系中删除对象混淆了。

首先,检查您的关系的删除规则:

删除规则

如果删除规则是“nullify”,那么这意味着您可以从关系中删除对象而不删除对象。在这种情况下,这听起来像是您想要的:您希望能够从与特定笔记的关系中删除标签,而不会影响使用该标签的所有其他笔记。

关于实际修改与新标签集的关系,您可以做两件事。第一种方法就像您提到的那样,只需从笔记中删除所有标签并重新添加它们。这实际上是一个很好的计划。当然,当您添加标签时,您需要首先检查每个标签是否存在,如果存在,请将现有标签添加到关系中。

在伪代码中:

  1. 删除当前笔记中的所有标签。
  2. 制作一个可变集合,以保存您要添加的集合。
  3. 获取链接标签的新字符串数组
  4. 对于每个标签字符串,请执行以下操作:
    1. 创建谓词以查找具有该名称的 Tag 对象。创建一个获取请求,并执行它。
    2. 查看结果:如果有返回的标签(即结果数组中有 >0 个对象),请将其添加到您的可变集合中。
    3. 如果没有返回标签(即没有具有该名称的标签),则创建一个新的 Tag 对象。将其添加到您的可变集合中。
  5. 将 Note 的tags属性设置为新的标签集。

另一种方法是调用NSMutableSet *mySet = [yourNote mutableSetValueForKey:@"tags"]. 这将返回一组可变的标记对象,并且您对集合所做的任何更改都会被 Core Data 自动看到。因此,您可以从中删除一个对象,然后该对象将不再存在于关系中,或者您可以将另一个标签添加到集合中,它将与笔记相关。

在任何时候,我们都没有从数据库中删除对象。您的所有标签仍然存在,我们只是更改了哪些标签与哪些笔记相关。

于 2012-05-25T09:24:25.083 回答