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

Ios 为什么实体不能对一个强制反向关系具有唯一性约束?,ios,core-data,Ios,Core Data,为什么实体不能对一个强制反向关系具有唯一性约束? 有两个实体: 人 属性:名称 关系:部门(对一,非可选) 系 属性:标题(唯一约束) 关系:个人(对多人,可选) 模型无法在iOS 9、XCode 7.0.1中编译,实体配置错误: 实体配置错误:实体部门不能具有唯一性 约束和一个强制的反向关系 人事部 更新: 问题仍然与XCode 8.3.1相关。将您的关系属性设置为“可选”。这解决了我的问题。简短回答: 潜在的问题很可能是由sqlite标准引起的。我不确定。然而,很可能是因为sqlit

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

属性:名称

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

属性:标题(唯一约束)

关系:个人(对多人,可选)

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

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

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

将您的关系属性设置为“可选”。这解决了我的问题。

简短回答:


潜在的问题很可能是由sqlite标准引起的。我不确定。然而,很可能是因为sqlite的局限性。我在互联网上找到了一些帖子,人们在一张桌子上遇到了多个约束的问题,这很可能就是为什么两张桌子的解决方案有效的原因

长答案:

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

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

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

您可以使用变通方法两者都可以。可以创建具有唯一约束的超类。然而,这也不是没有问题的

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

A是你的超类,B是A的子类,C也是A的子类。对其属性primaryKey具有唯一约束。保存B和C的实例时,不能使B和C具有相同的primaryKey。因为CoreData将作为一个

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

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

现在可以将primaryKey映射到originalPrimaryKey,在设置originalPrimaryKey时,可以将字符串primaryKey属性设置为CLASS_NAME.{originalPrimaryKey}。这会让你有你所期望的行为。但是您必须为primaryKeys添加一个变通方法。

如果您试图添加对现有实体和记录的约束, 解决办法是 1.从现有实体中删除所有记录 2.删除与实体的现有关系。
3.再次重新生成+CoreDataClass和+CoreDataProperties。

问题明确涉及强制关系。我知道它适用于可选的,但缺乏验证。处理可选关系比不需要的子类化要省力得多。感谢您提供的解决方法,但原因尚未公开-您只是解释了我的输入,因此我不能接受这一点作为答案。根本问题很可能是由sqlite标准引起的。我不确定,所以我没有提到。然而,很可能是因为sqlite的局限性。我在网上找到了一些帖子,人们在一张桌子上遇到了多个约束的问题,这很可能就是为什么两张桌子的解决方法有效的原因。谢谢。我添加了你的评论,以方便其他人发现。似乎是XCode 7.0.1–8.3.1中的一个bug。稍后将提交雷达。