为什么实体不能具有与一个强制性反向关系的唯一性约束?

时间:2015-09-29 13:22:01

标签: ios core-data

为什么实体不能具有与一个强制性反向关系的唯一性约束? 有两个实体:

property:name

关系:部门(对一,非可选)

property:title(唯一约束)

关系:person(to-many,optional)

模型在iOS 9,XCode 7.0.1中编译失败,实体错误配置错误:

  

配置错误的实体:实体部门不具备唯一性   约束和一个强制性的反向关系   Person.department

更新 问题仍然与XCode 8.3.1相关。

3 个答案:

答案 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更改为两个属性:

  • int:originalPrimaryKey(NO unique constraint)
  • string:primaryKey(唯一约束)

您现在可以将primaryKeys映射到originalPrimaryKey,并且在设置originalPrimaryKey时,您可以将字符串primaryKey属性设置为CLASS_NAME。{originalPrimaryKey}。这将允许您拥有您期望的行为。但是您必须为primaryKeys添加一种解决方法。

答案 1 :(得分:0)

如果您尝试添加具有记录的现有实体的约束, 解决方案是 1.删​​除现有实体中的所有记录 2.删除与实体的现有关系。 3.重新生成+ CoreDataClass和+ CoreDataProperties。

答案 2 :(得分:-4)

使您的关系属性“可选”。这解决了我的问题。