[英]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.