CoreData不删除对象一对多实体

Posted

技术标签:

【中文标题】CoreData不删除对象一对多实体【英文标题】:CoreData not removing objects one-to-many entities 【发布时间】:2013-07-02 20:23:04 【问题描述】:

这将删除 BLOG 中的对象,但不会删除 LABEL 中的对象。我认为 coredata 会自动删除两个实体?我必须在每个实体上手动执行吗? LABEL没有remove方法怎么办。

    //delete records from database no longer needed
    for (NSManagedObject *blogTBD in deleteArray) 

        //Delete object from BLOG
        [self.managedObjectContext deleteObject: blogTBD];
     

在我的 BLOG.h 文件中也有四种方法。有人可以解释为什么使用它们,因为我似乎无法将它们用于任何有用的事情。

- (void)addLabelsObject:(LABEL *)value;
- (void)removeLabelsObject:(LABEL *)value;
- (void)addLabels:(NSSet *)values;
- (void)removeLabels:(NSSet *)values;

在我的脑海中,逻辑是 [blogObj addLabels: nssetoflabels] 在 LABEL 中添加新标签,或 [blogObj removeLabelsObject: label] 在 LABEL 中删除标签,但这些都不起作用。

这是我为每个博客添加标签到 LABEL 的方法,这是我让它工作的唯一方法:

  for (int i = 0; i < newCategory.count; i++) 

        LABEL *blogLabels = [NSEntityDescription       insertNewObjectForEntityForName:@"LABEL" inManagedObjectContext:self.managedObjectContext];
        blogLabels.categories = [NSString stringWithFormat:@"%@", newCategory[i]];

        //Assign relatioship - add labels to blog
        blogLabels.blog_labels = myBlog;

        //save label
        [self.managedObjectContext save:&error];
    

【问题讨论】:

顺便说一句:在一个问题中问两件没有太多共同点的事情通常不是一个好主意。也许您应该将问题的第二部分移到一个新问题中。 【参考方案1】:

您必须将模型中的 delete rule 从“Nullify”更改为“Cascade”。

Nullify 是默认设置,因为它是最安全的。 Nullify 不会删除任何内容,它只是将反向关系设置为 Null。 Cascade 将删除关系目标处的对象。


关于您的第二个问题,这些方法的工作原理与您认为的完全一样。

为什么它们不起作用?我不知道。他们应该工作。

【讨论】:

马蒂亚斯你就是那个男人!非常感谢,这太棒了 - 当然现在一个简单的搜索我在谷歌上找到了答案,因为我知道它叫什么。不管怎样,这些方法对我不起作用是不是和之前的删除规则有什么关系?

以上是关于CoreData不删除对象一对多实体的主要内容,如果未能解决你的问题,请参考以下文章

一对多删除对象不删除多个实体上的对象

CoreData - 如何在一对多关系中添加多个对象

获取对象时无法访问一对多CoreData关系

核心数据:删除最后一个具有一对多关系的实体

如何基于另一个实体的一对多关系访问 CoreData 实体?

CoreData 在一对多关系中编辑一个属性