核心数据ios9:多字段唯一约束

我知道核心数据的新function是独特的约束,所以我决定testing它。 我创build了简单的模式,当我添加一个字段的约束(例如firstName) – 所有的作品。 如果我为另一个字段(lastName)添加约束 – 核心数据为每个字段单独创build两个不同的约束(我尝试添加两个字段逗号分隔在一行,每个字段在单独的行 – 没有区别)。 但是我想要组合firstName + lastName的唯一约束,这有可能吗?

感谢您的回复!

可以为属性组合设置唯一性约束。 你在正确的道路上把两个属性放在约束的同一行:

数据模型编辑器快照

您可能已经发现,由于Xcode的问题,这没有任何效果:除非您同时修改模型的某些其他方面(例如更改属性types,然后将其更改回来),否则约束在模型中不会实际更新。 。

如果查看正在生成的SQL,则使用约束创build表:

CREATE TABLE ZSTOREOBJECT ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ...., CONSTRAINT ZLASTNAME_ZFIRSTNAME UNIQUE (ZLASTNAME, ZFIRSTNAME)) 

并且当你插入新的插入新的值失败这个约束(当上下文被保存):

 CoreData: sql: COMMIT CoreData: sql: BEGIN EXCLUSIVE CoreData: sql: INSERT INTO ZSTOREOBJECT(Z_PK, Z_ENT, Z_OPT) VALUES(?, ?, ?) CoreData: sql: UPDATE ZSTOREOBJECT SET ZLASTNAME = ?, ZFIRSTNAME = ? WHERE Z_PK = ? CoreData: sql: ROLLBACK 

并返回错误是:

 Error Domain=NSCocoaErrorDomain Code=133021 "(null)" UserInfo={conflictList=( "NSConstraintConflict (0x7fbd18d33c10) for constraint (\n lastName,\n firstName\n): .... 

(这个工作在Xcode 7.2.1,与iOS9.2模拟器;我没有检查以前的版本)。

在模型编辑器中设置约束时,似乎Xcode在运行时持久更改磁盘的典型行为不适用。 (Xcode 7.3,在我的情况。)😞

解? 重新假装它是1990年,然后在更改约束条件后点击⌘-S

不支持复合约束或多字段约束。 目前,您只能添加单个字段的约束。