2012-04-02 12 views
1

私のルートviewControllerのメソッドviewWillDisappear, viewWillUnload viewDidUnloadは決して呼び出されません(それぞれにログステートメントがあります)。viewWillDisappear、viewWillUnload viewDidUnloadは決して呼び出されません。

ここのように思われますが、回答は完全にはっきりしていません。これは、viewControllerビューがUINavigationControllerに埋め込まれている必要があることを意味するように思われます。

viewWillDisappear and viewDidDisappear never get called

これは、他の私は、いくつかのクリーンアップを行うと、私のUIDocumentの変更が保存され得ることを保証することができます場合、ある場合は?

編集:私はroot viewControllerイベントがどのように機能するかを誤解していると推測します(ユニークな状態など)。 AppDelegateメソッドを調べます。私のUIDocumentの内容が保存されていること、そしてCore Audioのものが正しく閉じられていることを確認しようとしています。閉じる

AppDelegateにより投稿された通知と一緒に行くことになりました。あなたは一度やった後、かなりうまく仕事をする+シンプルなものに見えます。 appDelegate

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 

[[NSNotificationCenter defaultCenter] postNotificationName: @"handleCleanup" 
                object: nil 
                userInfo: nil]; 
} 

と通知のために登録する私のVCから

//:

[[NSNotificationCenter defaultCenter] addObserver: self 
             selector: @selector(saveAndCleanup) 
              name: @"handleCleanup" 
              object: nil]; 

答えて

3

それはあなたのルートビューだし、あなたはそれを変更することはありません場合 - 消えることはないだろう。あなたのアプリをバックグラウンドに置くと、viewWillDisapearが呼び出されることがありますが、私は覚えていません。

メモリ警告が表示された場合、表示コントローラはアンロードされますが、オンスクリーンの場合はアンロードされません。

viewWillDisappear:

この方法は、ビュー階層から除去されるビューに応答して呼び出されます。このメソッドは、ビューが実際に削除され、アニメーションが設定される前に呼び出されます。

viewDidUnload:

メモリ不足状態が発生し、現在のビューコントローラのビューが必要とされない場合、システムはメモリからこれらのビューを削除することを選ぶことができます。このメソッドは、View Controllerのビューが解放された後に呼び出され、最終的なクリーンアップを実行する機会です。ビューコントローラがビューまたはそのサブビューへの個別の参照を格納する場合は、このメソッドを使用してそれらの参照を解放する必要があります。また、このメソッドを使用して、ビューをサポートするために作成したオブジェクトへの参照を削除することもできます。ただし、ビューがなくなったので不要になりました。このメソッドを使用して、ユーザーデータや簡単に再作成できないその他の情報を解放しないでください。

+0

doh!それは理にかなっている。私はシミュレータでテストしていて、それらのビューイベントがトリガされるのを期待していました。 AppDelegateが私のクリーンアップを処理する正しい場所であるように見えます。 –

0

不要なキャッシュまたはリソースを解放する典型的な場所は- (void)didReceiveMemoryWarningです。この方法でそうしなかった場合、iOSはメモリ不足時にアプリを強制終了することがあります。

モバイルアプリの性質を考慮して、できるだけ頻繁に保存する必要があります。典型的な実装では、タイマーを使用して自動保存を発行します。場合によっては電話がかかってくることがあります.iOSは大量のメモリを使用しているため、アプリをバックグラウンドに置くのではなく、アプリを強制終了することがあります。

- (void)didReceiveMemoryWarningが呼び出されたときに、ビューがアンロードされることがもう1つあります。これは、しかし、アプリが殺されることを意味しません。これは、次回アプリを開いたときに、viewDidLoadが再び呼び出されることを意味します。このような意味で、この方法でファイルを試して保存することができます。

関連する問題