2017-07-27 13 views
1

「Person」というエンティティがあります。それはデフォルト値= 0の属性 "id"を持っています。私は "Person"の中で唯一のIdsを持つように制約を設定しました。私はサーバーからPersonのリストをロードし、コアデータを使用してローカルに格納しています。人物IDは一意でなければなりませんが、複数の人物をローカルに作成する場合、idの一意性はデフォルト値0であれば無視されることを望みます。コアデータデフォルト値以外の一意制約

0以外のすべてのidで一意性制約を機能させたいだけです。これどうやってするの?

おかげで、一意性を保証する唯一の方法は、フェッチと結果がない場合は、オブジェクトを作成を行うことであるコア・データに追加する制約の前に

+0

idが0の複数のエントリを許可したいのですか? –

+0

はい、id == 0 => else overrideを許可している場合、つまりidが== 0の場合でもオーバーライドが常に動作するように、マージポリシーを使用しています。 – MeMTn

+0

@MeMTnドキュメント参照はありますか複数のnil値の場合 –

答えて

1

コアデータの一意性制約は例外ではなく、一意性が要求されます。 「複製できる1つの値を除いてユニーク」を希望する状況は、コアデータで直接サポートされていません。何とか自分のコードでそれを維持しなければならないでしょう。これはおそらく、IDが存在するかどうかを確認する独自の更新または挿入ロジックを実装することを意味します。それは、

  1. のようなものになります。特定のIDでフェッチしてください。
  2. オブジェクトを見つけたら更新してください。
  3. オブジェクトが見つからない場合は、新しいオブジェクトを作成します。
+2

私は少し違って解決しました。 id = nullなので、デフォルトのid値をnullに設定したので、自分自身でIDをインクリメントする必要はありません。ありがとうと思います:) – MeMTn

+0

ああ、IDを持っていないのは大丈夫なら別です。 :) –

0

。それは難しいことではありません。コード内で一意性を強制し、必要なカスタムロジックを使用します。ロジックを扱いやすいように人を作成する方法が1つまたは2つしかないようにコードを整理してみてください。

+0

一意性制約とマージポリシーはコアデータに対して「更新または挿入」を実装し、コードでは強制は必要ありません –

+0

@TomHarringtonは、マージポリシーがある場合、既存の管理対象オブジェクトは同じIDを持っていれば新しいもので上書きされます(私の一意制約です)。私はmanagedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicyをマージポリシーとして使用しています。 – MeMTn

関連する問題