は、私は2つのフィールドを持つ簡単なテーブル「人」を持って失敗した上で、フィールド名を取得する方法(ないアイデンティティ+名前)CoreDataユニーク制約: アイデンティティ=>文字列 名=>文字列 このテーブルには、ユニークな分離された制約があります:アイデンティティと名前制約チェックが
私は、このテーブルと同じデータに挿入しようと数回は:
let names = ["Name1", "Name2", "Name3"]
for i in 0..<3 {
let p = Person() //NSManagedObject sublass
p.identity = "1111"
p.name = names[i]
do { try p.managedObjectContext!.save() }
catch let e as NSError {
if e.code == NSCocoaError.ManagedObjectConstraintMergeError.rawValue {
print(e.userInfo["conflictList"]![0]!)
}
}
}
私は、ログを持っている:
制約のNSConstraintConflict(0x7ff12b84f600)( ID ):データベース:(エンティティ:Person; ID:0xd000000000040000;データ:)、conflictedObjects:( "(実体:人; ID:0xd000000000140000;データ:{\ n個のID = 1111; \ nは名=名1; \ nを})"
)はどのように取得することができます制約のuserInfo NSConstraintConflict(0x7ff12b84f600)からの制約のフィールド名(ID)?将来的には、 "一意制約チェックがフィールド" ID "に失敗し、"一意制約チェックがフィールド "name"で失敗しましたが、エラーからフィールド名を取得できない間に、どのフィールドチェックが失敗しました
ありがとうございました!
ありがとうございました! AnyObject型のNSConstraintには、制約名付きの文字列値が含まれていることはお勧めできません。 – Anton