如果我需要以编程方式清空由Core Data自动创建的NSSet(多个关系),我该怎么办?像这样的东西?
[self willChangeValueForKey:@"MyRelationship"];
[[self MyRelationship] release];
[self MyRelationship] = [NSSet alloc] init];
[self didChangeValueForKey:@"MyRelationship"];
不确定它是否正确...... 感谢
答案 0 :(得分:6)
[[self mutableSetValueForKey:@"MyRelationship"] removeAllObjects];
出于某种原因,我永远无法让“级联”删除规则起作用,所以当我想删除对象时,我必须遍历集合并调用[self.managedObjectContext deleteObject:obj]
,否则我将得到验证错误,如果关系被定义为必需。
答案 1 :(得分:1)
帕特里克,
不出所料,关系在核心数据方面是特殊的。它们提供了一些专门的方法来从这些关系中删除对象。您应该使用这些方法,而不是尝试覆盖访问器。就像在这个片段中一样:
[self removeMyRelationship: self.myRelationship];
我还认为你应该删除被覆盖的访问器方法。
我对您的删除问题没有任何了解。我建议您只是遍历组并删除对象。我认为你的普查员必须是你的关系的副本。如以下ARC代码所示:
for (Relation *r in [self.myRelationship copy]) {
[moc deleteObject: r];
}
安德鲁