2009-11-16 6 views
7

ユーザーが現在編集ビューコントローラにいる場合、ユーザーが自分のアプリケーションを閉じるときに変更を保存できるようにしたい。これを行うには、共有アプリケーションのを観察しています。私のアプリケーションデリゲートでは、applicationWillTerminate:メソッドを使用して、すべてのコアデータコンテキストを閉じて解放します。アプリケーションが通知を終了し、下書きを保存する(コアデータ)

私が見つけた問題は、のアプリケーションデリゲートのメソッドが、の通知に反応するすべてのオブザーバーがの前にと呼ばれることです。これは、編集ビューコントローラが何かを保存する機会を得る前に、私のコアデータスタックが解放され閉じられたことを意味します。

私は方法を見ることができないので、これは通常どのように克服されます!

多くのおかげで、

マイケル

答えて

4

編集:最初の(通知ベース)のアプローチは、おそらく、実行ループや通知の内部の仕組みに動作しません。

通知ベースのアーキテクチャを採用したい場合は、applicationWillTerminate:から実際に通知を送信することができます。独自のMyApplicationWillTerminate通知を作成してから、[NSNotificationCenter defaultCenter]postNotification:と電話をかけてください。次に、デフォルトのではなく、MyApplicationWillTerminateのインスタンスの編集コントローラを登録してください。

もう1つの選択肢は、あなたのアプリケーションデリゲートにエディットコントローラーのインスタンスが表示されている場合に保存してから、applicationWillTerminate:コアデータコンテキストを解放する前に新しい情報を保存することです。ただし、これは余分なインスタンス変数を使用してアプリケーションデリゲートを汚染するため、最適なソリューションではない可能性があります。

最後に考えたことは、ユーザーが作成した編集内容をアプリに保存させるのはなぜですか?そうすれば、情報の編集中にアプリケーションが途中で終了することを心配する必要がなくなります。編集内容はすでに保存されています。既にCore Dataをリリースしているだけです。 (これはあなたには適切ではないかもしれません;あなたのアプリの構造と編集しているデータについてもっと知らなくても、私は本当に言うことができませんでした)

+1

ユーザが編集したときに下書きを保存する場合は+1、終了時に有用で複雑なものを行う時間はかなり限られています。 –

+0

編集内容の保存に関する興味深い点。私はそれを調べるかもしれない。私自身の通知を投稿することに言及すると、次の実行ループで 'applicationWillTerminate:'コードが終了した後で、それらは取得されません。すべてのコードが同じ(メイン)スレッド上にあるためです。 –

+0

マイケル:あなたはおそらく正しいでしょう - 私は自分の答えを投稿した直後にこれを認識しました(今編集されています)。おそらく編集内容を保存しておくのが一番良いでしょう。したがって、この問題を避けてください。 – Tim

0

NSManagedObjectContextはストアコーディネーターとオブジェクトモデルを保持していますか?その場合、コントローラに管理されたオブジェクトコンテキストを保持させるだけでは十分ではありませんか?

関連する問題