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