簡體   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