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不删除对象一对多实体的主要内容,如果未能解决你的问题,请参考以下文章