为什么实体不能具有与一个强制性反向关系的唯一性约束? 有两个实体:
property:name
关系:部门(对一,非可选)
property:title(唯一约束)
关系:person(to-many,optional)
模型在iOS 9,XCode 7.0.1中编译失败,实体错误配置错误:
配置错误的实体:实体部门不具备唯一性 约束和一个强制性的反向关系 Person.department
更新 问题仍然与XCode 8.3.1相关。
答案 0 :(得分:5)
简答:
潜在的问题很可能是由sqlite标准引起的。对此我不确定。但是,很可能是因为sqlite的局限性。我在互联网上发现了一些帖子,人们在一张桌子上遇到了多个限制的问题,这很可能是两桌解决方案有效的原因。
答案很长:
现在已经很晚了,但无论如何我希望它有所帮助。
当您的实体具有唯一约束和强制关系时,会发生这种情况。我想这是因为iOS 9.0中添加了独特的约束行为。但是,您可以通过两种方式解决此问题:
删除唯一约束或使关系可选。您可以在代码中处理可选关系。但这不是一个好的解决方案。
OR
您可以使用变通方法。 您可以同时拥有两者。您可以创建具有唯一约束的超类。然而,这也不会没有问题。
让我们有三个实体。 A,B和C.
A是你的超类,B是A的子类,C也是A的子类。 A对其属性primaryKey具有唯一约束。保存B和C的实例时,不能使用相同的primaryKey来生成B和C.因为CoreData将同时管理为A。
您可以将A更改为两个属性:
您现在可以将primaryKeys映射到originalPrimaryKey,并且在设置originalPrimaryKey时,您可以将字符串primaryKey属性设置为CLASS_NAME。{originalPrimaryKey}。这将允许您拥有您期望的行为。但是您必须为primaryKeys添加一种解决方法。
答案 1 :(得分:0)
如果您尝试添加具有记录的现有实体的约束, 解决方案是 1.删除现有实体中的所有记录 2.删除与实体的现有关系。 3.重新生成+ CoreDataClass和+ CoreDataProperties。
答案 2 :(得分:-4)
使您的关系属性“可选”。这解决了我的问题。