ようかのようcoredataは、このメソッドを呼び出すことになり、特殊なパラメータであり、私がその最初の答えをしたときに十分注意深く。個々のattrsの個々のエントリが正しいことを検証するのではなく、すべての attrsがそのオブジェクトに対して満たされていない限り、変更を保存する必要はありません。
「Model Object Validation」アップルのドキュメントを見ると
は、あなたが
間 -property検証ではなく、プロパティの検証と懸念している、とあなたは、この目的のために
validateForInsert:
を使用して考えなければ正しい軌道に乗っています。
この文書にも例が示されています。
- (BOOL)validateForInsert:(NSError **)error {
if (self.name && self.class && self.age)
return [super validateForInsert:error];
else
return NO;
}
ただし、この方法は保存段階ではなく挿入段階で行われます。
新しいエンティティのエントリをまとめて収集する場合は、挿入段階で検証すると意味があります。つまり、そのオブジェクトが不完全として破棄された場合は、新しいオブジェクトをコンテキストに追加しないでください。 既存のオブジェクトへの変更のエントリを収集していて、それらの変更を受け入れる前にそれらの変更がすべて一緒に機能するようにしたい場合は、validateForUpdate:
が意味を持ちますが、オブジェクトを元の状態に復元する方法はありません他の場所で元の値をキャッシュしていない限り、保存せずにコンテキストを再オープンする以外の方法があります。 オブジェクトを個別に収集してオブジェクトを保存する前にそれらがすべて完了していることを確認する場合は、まずコンテキストの挿入オブジェクトをループし、コンテキストを実際に保存する前に検証を行います。上書きする既存のvalidateForSave:
メソッドはありませんが、追加することはできます。
これらの手法を組み合わせることもできます。エントリを収集して新しいオブジェクトを挿入せずに作成しますが、これらのオブジェクトはすべてアレイにキャッシュします。保存する時間が来たら、キャッシュをループしてオブジェクトがコンテキストに挿入されるのは、validateForInsert:
を渡す場合のみです。コンテキストを保存します。
明らかに私はあなたと一緒に学んでいるので、上記はかなりクッキーではないかもしれません。うまくいけば、アップルの医者があなたを始めるのに十分であることを望みます。
例えば、キーとして属性が必要であり、その属性がnilでなければ、コンテキスト内の他の値だけをコアデータに保存する必要があります。そんなことはありますか? @ウィンケ – Vijay
あなたの質問を誤解していました。私は以下の別の答えを掲示しました。 – Wienke