2016-05-31 12 views
0

は、私は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"で失敗しましたが、エラーからフィールド名を取得できない間に、どのフィールドチェックが失敗しました

ありがとうございました!

答えて

1

AFAIK nor NSConstraintConflictNSConstraintのようなものはどちらも文書化されていません。 、conflictedObjects:(「(エンティティ制約のために(アイデンティティ

NSConstraintConflict(0x7ff12b84f600):データベース:(:;:; 0xd000000000040000データエンティティIDの人を)しかし、制約の競合が制約を知っています:人; ID:0xd000000000140000;データ:{\ n個のID = 1111; \ nは名=名1; \ nの}私はあなたが制約を得ることができることを賭けるだろう

)」)

[conflict valueForKey:@"constraint"] 

結果のクラスを探します。

+0

ありがとうございました! AnyObject型のNSConstraintには、制約名付きの文字列値が含まれていることはお勧めできません。 – Anton

関連する問題