我知道核心数据的新特性是唯一的约束因此我决定测试它.我创建了简单的模式,当我为一个字段添加约束时(例如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))
Run Code Online (Sandbox Code Playgroud)
当您插入新的插入新值时,这个值不符合此约束(保存上下文时):
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
Run Code Online (Sandbox Code Playgroud)
并返回错误:
Error Domain=NSCocoaErrorDomain Code=133021 "(null)" UserInfo={conflictList=(
"NSConstraintConflict (0x7fbd18d33c10) for constraint (\n lastName,\n firstName\n): ....
Run Code Online (Sandbox Code Playgroud)
(这适用于Xcode 7.2.1,iOS9.2模拟器;我没有检查过以前的版本).
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |