在我的CoreData数据模型中,有一个Note实体和一个Tag实体,它们有多对多的关系,因此每个Note可以有很多标签,每个标签可能属于许多Notes。
标签以逗号分隔的字符串输入: 猫,狗,猪
然后我将字符串拆分为'cat','dog','pig'假设我有一个注释标签'cat','dog','pig',我删除'pig'并添加'bird',起初我有一个字符串: “猫,狗,鸟”,然后是“猫”,“狗”,“鸟”,
现在该怎么办?我应该删除此笔记的所有标签并重新添加所有标签吗?但是,一旦我删除了所有标签,那么共享相同标签的其他Notes会丢失这些标签吗?
谢谢!
答案 0 :(得分:3)
删除某个对象并将其从关系中移除时,您会感到困惑。
首先,检查关系中的删除规则:
如果删除规则为“nullify”,则表示您可以从关系中删除对象而不删除该对象。在这种情况下,这听起来像你想要的:你希望能够从特定音符的关系中删除标签,而不会影响使用标签的所有其他音符。
关于实际修改与新标签集的关系,您可以做两件事。第一种方法就像你提到的那样,只需从笔记中删除所有标签并重新添加它们。实际上这是一个非常好的计划。当您添加标记时,当然,对于每个标记,您需要先检查它是否存在,如果存在,请将现有标记添加到关系中。
在伪代码中:
tags
属性设置为新的标记集。执行此操作的另一种方法是让NSMutableSet *mySet = [yourNote mutableSetValueForKey:@"tags"]
调用{{1}},该方法允许您从关系中一次添加和删除一个标记。这将返回一组可变标记对象,并且Core Data会自动查看您对该集所做的任何更改。因此,您可以从中删除对象,然后该对象将不再处于关系中,或者您可以向该集添加另一个标记,并且它将与该注释相关。
我们在任何时候都没有删除数据库中的对象。您的所有标签仍然存在,我们只是更改了与哪些标签相关的内容。