我正在使用Core Data和多对多关系:一个建筑可以有多个部门,一个部门可以在多个建筑物中 . 以前使用过数据库后,我不确定如何在Core Data中实现它,但我在Core Data Programming Guide中找到了这个:
如果您有数据库管理的后台,这引起您的关注,请不要担心:如果您使用SQLite存储,Core Data会自动为您创建中间连接表 .
但是,实际上没有任何数据完整性 . 我已经尝试插入一些构建对象,现在只有一个属性(数字),每次我设置它所涉及的部门对象(关系) . 这导致数据库包含具有相同建筑物编号的多个建筑物对象,所有这些都与不同的部门对象相关 . 理想情况下,每个建筑物编号都有一个对象,其中包含所有不同的部门 .
所以,我的问题是:Core Data能否以某种方式维护数据完整性,或者我应该在插入之前检查具有该数字的构建对象是否已存在?看起来我必须手动检查它,但如果Core Data可以为我做这件事会很酷 .
2 回答
melsam 写的是对的 . 除了他的回答,我建议你使用反向关系 . 关于逆,苹果说:
要理解的一个关键点是,当您使用Core Data时,您将使用对象 . 因此,在保存上下文时会解析完整性标准,或者您明确表示要处理上下文以处理挂起的更改(请参阅
processPendingChanges
方法) .关于你的问题,我想你必须创建一个获取请求并检索你正在寻找的对象(例如,你可以为每个对象提供一个特定的id并设置一个你想要的id的谓词) . 如果获取请求检索某些对象,则可以更新它们 . 如果没有,请使用
insertNewObjectForEntityForName:inManagedObjectContext:
创建一个新对象 . 最后保存上下文 .我建议你阅读Efficiently Importing Data .
希望能帮助到你 .
Core Data为您维护数据完整性 . 我可以向您保证(从核心数据的大量经验),您不必手动检查完整性 . 仔细检查如何在Xcode的核心数据模型编辑器中设置关系和删除规则 . 我无法确切地说出你提供的细节可能有什么问题,但如果你四处寻找,你会发现它 .