アプリケーションを終了する前にiPhoneアプリケーションの状態を保持する方法は?
-
06-07-2019 - |
質問
TabバーとNavigation Controllerを備えたiPhoneアプリケーションを開発しました。
今のところ正常に動作しています。
アプリケーションを終了する前にその状態を保存するようにしたい
6つのタブがあり、着信呼び出しがあった場合、アプリを再起動すると、最後に選択されたタブが選択されていることがわかります。
このトピックに関するいくつかの質問を見てきましたが、それらを見た後はさらに混乱しています。
誰でも私にこれを行う簡単な方法を教えてもらえますか?
解決
「すべてに適合するサイズ」はありません。この質問に対する正確な答えです。アプリケーションの状態を保存する実装は、アプリケーションの構造に大きく依存するため、特定のケースに適合する単一のソリューションはほとんどありません。
いくつかの一般的なヒントとポインタがありますが、適切な状態を維持するソリューションを開発するための正しい道にあなたを置くべきです:
-
通常は、アプリデリゲートの
>applicationWillTerminate:
で状態を保存するか、他のクラスでUIApplicationWillTerminateNotification
をリッスンする操作を実行します。 -
NSUserDefaultsを見てください。 NSUserDefaultsを使用してキー/プリファレンスまたはその他の情報に関連する値のペア(NSDictionaryに似ていますが、NSUserDefaultsにNSCodingを実装するオブジェクトのみを保存できます)。 NSUserDefaultsを使用して、状態情報を保存します。注意点-NSUserDefaultsを使用して大量のデータを保存しないでください。アプリケーションの起動時間が遅くなります(起動時に値がロードされるため)。
-
より具体的なケース...アプリケーション間で選択したタブを保持するだけであれば、
applicationWillTerminate:
を実装し、NSUserDefaultsを使用して選択したタブインデックスを保存する必要があります。次に、applicationDidFinishLaunching:
実装で、NSUserDefaultsキーの存在を確認し、UITabBarControllerの選択されたインデックスを保存されている値に設定します(存在する場合)。 -
たとえば、選択したタブのナビゲーションスタックも復元できるようにする場合は、ナビゲーションスタックを正確に再構築できるように十分な情報を保存する必要があります。 NSUserDefaultsに保存する情報は、アプリケーションの構造とナビゲーションスタック内のView Controller階層の可能な反復に非常に固有であるため、一般的な意味で定量化するのは困難です。
-
より一般的なナビゲーションスタックを復元する必要がある場合。たとえば、アプリケーションを閉じたときに失われないように入力したユーザーデータ(ユーザーが何らかの種類の新しいレコードを作成している場合など) )、アプリのデリゲートレベルでアプリケーションの状態を保存するのではなく、View Controllerクラスが
UIApplicationWillTerminateNotification
をリッスンし、独自の特定の状態保存を行うことに集中することをお勧めします。また、終了時にView Controllerごとに保存された情報を使用してナビゲーション階層を復元するためのメカニズムを決定する必要があります。これはより複雑な手法であり、ニーズによっては不要な場合があります。
残念ながら、特に一般的で複雑なケースでは、この答えは少し曖昧です。なぜなら、アプリケーション構造に大きく依存しているため、この質問に対する一般的な解決策はないからです。
NSUserDefaultsの使用例: http://robertcarlsen.net/2009/06/19/overly-simplistic-saving-state-in-of-for-iphone-847