1

皆さん、NSManagedObject のサブクラスを取得しました。awakeFromInsert と awakeFromFetch では、特に NSTimer を開始する初期化メソッドを呼び出しています。

ここで、タイマーを無効にする場所が必要です。ただし、dealloc、finalize、didTurnIntoFault、prepareForDeletion、および willTurnIntoFault は呼び出されません。

ドキュメントによると、これらのメソッドはすべて、オブジェクトがメモリからクリアされるときに呼び出される必要があります。それらはどれもありませんが、すべてのデータは永続ストアに保存されます。なぜ、どのように、私は困惑しています。

オブジェクトのライフサイクル中にこれらのメソッドが呼び出されない可能性があることはありますか?

4

1 に答える 1

0

コア データは の寿命を制御しますNSManagedObject。要求しない限り、オブジェクトをメモリからフラッシュすることはありません。ドキュメントを見ると、次の2 つの方法があるようです。

  1. MOC に送信refresh:mergeChanges:すると、オブジェクトが障害になります。
  2. MOC に送信resetすると、作成されたばかりであるかのように MOC 自体がリセットされます。

ただし、上記のいずれも明示的なアクションが必要なため、オブジェクトにメソッドを追加して、タイマーを無効にしてそれを呼び出すこともできます。

実際、あなたの問題はおそらく設計上の問題を示しています。NSTimer は基本的にユーザー インターフェイス イベントです。アクションを実行するためにモデル オブジェクト (NSManagedObject) にメッセージを送信する MVC コントローラーによって制御される必要があります。

于 2010-12-20T10:38:41.687 に答える