属性の組み合わせに対して一意性制約を設定することは可能です。あなたが制約に同じ行に両方の属性を置く正しい道の上にいた:
あなたは、これが原因の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): ....
(これはXcodeの7.2で動作します。 1、iOS9.2シミュレータ私は以前のバージョンをチェックしていない)。
悲しいことに、このバグは今日でもXcode 8にはまだ存在しています。ちょうど私に起こった。信じられない。 –