ric*_*ter 13 core-data objective-c
关于Core Data中关系的删除规则是如何工作的,我有点模糊,至少超出了文档中描述的简单情况.
大多数情况,以及我在这里看到的问题的大多数答案都使用了一个模型,其中一对多关系左侧的对象"拥有"右侧的对象:例如a Personhas PhoneNumbers,如果删除该人,则删除所有相关联的号码.在这种情况下,解决方案很明确:如果您设置如下关系,Core Data将为您处理所有事情:
Person --(cascade)-->> PhoneNumber
PhoneNumber --(nullify)--> Person
Run Code Online (Sandbox Code Playgroud)
我感兴趣的是相反的情况:"所有权"相反的多对多关系.例如,我可能会扩展CoreDataBooks示例代码以添加Author实体,以便在一个位置收集有关唯一作者的所有信息.A Book有一位作者,但作者有很多书...但我们并不关心我们没有列出书籍的作者.因此,不应该允许删除Author其books关系为非空的,并且删除Book引用特定的最后一个Author应删除该关系Author.
我可以设想手动执行此操作的几种方法......我不确定的是:
tim*_*tim 14
您可以prepareForDeletion在Book班级中覆盖,并检查作者是否有任何其他书籍.如果没有,你可以删除作者.
- (void)prepareForDeletion {
Author *author = self.author;
if (author.books.count == 1) { // only the book itself
[self.managedObjectContext deleteObject:author];
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:为了防止删除具有书籍的作者,您可以覆盖validateForDelete甚至更好:不要首先使用带有书籍的作者调用deleteObject
| 归档时间: |
|
| 查看次数: |
4414 次 |
| 最近记录: |