4

属性を持つNSManagedObjectクラスがありupdatedOnます。クラスのwillSaveメソッドに値を設定するロジックを実装したいと思っていました。これを実行しようとすると、このクラスのインスタンスでwillSaveが呼び出されていないことがわかりました。

調査の結果、どの値にも初期化されていないwillSave、新しく作成されたインスタンスに対してメソッドが呼び出されていないと判断しました。updatedOnこの属性はオプションに設定されていないため、検証は失敗しwillSave、インスタンスが有効な場合にのみメソッドが呼び出されるようです。

私の質問はこれです:この種のことを行うためのベストプラクティスはありますか?updatedOnこれを回避するには、属性をオプションにする必要がありますか?または、クラスのメソッドを実装してawakeFromInsertそこに初期値を設定し、willSaveメソッドが最終的に呼び出されたときにその値を上書きする必要がありますか?それとも、もっと理にかなっているもっと簡単なアプローチがありますか?

4

1 に答える 1

6

ドキュメントでは、タイム スタンプのメソッドのwillSave使用について言及しており、プロパティ値の変更と再帰に関するいくつかの複雑さについて言及しているにもかかわらず、この使用に対して特に警告していません。したがって、その事実に基づいて、この機能を配置するのに妥当な場所と見なすことができると思います。

ただし、ドキュメントでは、 NSManagedObjectContextWillSaveNotification一般的なタイムスタンプを計算するための の使用について言及しているため、おそらくこれがこの作業の代替場所になるでしょう。insertedObjectsタイム スタンプが必要なオブジェクトを見つけるにはとupdatedObjectsのコレクションを手動で検査する必要がありますmanagedObjectContextが、いくつかの簡単なテストに基づくと、検証手順の前に呼び出されるように見えるため、ここで必要なプロパティを設定する機会があります。

あなたが固執することを選択した場合willSave、3つのオプションがあると思います.

  • モデルで指定されたデフォルト値を持つ必須プロパティ。
  • awakeFromInsert またはその他の適切なポイントに設定されたプロパティを持つ必須プロパティ。
  • オプションのプロパティ。

どのオプションも妥当な選択だと思いますが、私だったらNSManagedObjectContextWillSaveNotification、willSave でのプロパティ値の設定が複雑なため、おそらく を選択したと思います。

于 2012-07-20T12:46:13.910 に答える