繁体   English   中英

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

[英]core data ios9: multifield unique constraint

我知道核心数据的新功能是唯一的约束,因此我决定对其进行测试。 我创建了简单的架构,并且当我为一个字段(例如,firstName)添加约束时,所有方法都可以使用。 如果我为另一个字段(lastName)添加约束-核心数据会为每个字段分别创建两个不同的约束(我尝试添加两个逗号分隔成一行的字段,而每个字段分别成一行-没什么区别)。 但是我想要对firstName + lastName组合使用唯一约束,这可能吗?

感谢您的回复!

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

数据模型编辑器快照

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

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

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): ....

(这适用于带有iOS9.2模拟器的Xcode 7.2.1;我尚未检查以前的版本)。

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

解? 假设1990年又过去了,更改约束后按⌘-S

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM