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

Yan*_*ska 21 core-data ios

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

财产:名称

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

  • 部门

property:title(唯一约束)

关系:人(对多,可选)

模型将无法在iOS 9,XCode 7.0.1中编译错误配置的实体错误:

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

更新: 问题仍然与XCode 8.3.1相关.

Mai*_*639 5

简短答案:

潜在的问题很可能是由sqlite标准引起的。对此我不确定。但是,很有可能是由于sqlite的限制。我在互联网上找到了一些帖子,人们在一张桌子上遇到多重约束的问题,这很可能是两张桌子变通办法起作用的原因。

长答案:

已经很晚了,但是我还是希望能有所帮助。

当您的实体具有唯一约束和强制关系时,就会发生这种情况。我猜这是因为iOS 9.0中增加了独特的约束行为。但是,您可以通过两种方式解决此问题:

您删除唯一约束或使关系成为可选。您可以在代码中处理可选关系。但这不是一个好的解决方案。

要么

您可以使用解决方法。您可以同时拥有。您可以创建具有唯一约束的超类。但是,这也不会没有问题。

我们有三个实体。A,B和C。

A是您的超类,B是A的子类,C也是A的子类。对其属性primaryKey具有唯一的约束。保存B和C的实例时,不能使B和C具有相同的primaryKey。因为CoreData会将两者都管理为A。

您可以将A更改为具有两个属性:

  • int:originalPrimaryKey(无唯一约束)
  • 字符串:primaryKey(唯一约束)

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