Swift慣れない街へ出かけるとき、電車の中で目的地までの道のりを「地図アプリ」で検索しておいて、駅を出てから地図を見て移動したことはありますか。「ネットショッピングアプリ」で欲しいものが見つかって、衝動買いするにはちょっと高価だったときに、レビューを読んだりネット上での評判を確かめたりしたことはありませんか。そんなとき、地図アプリやネットショッピングアプリを離れて他のことをして、また戻ってきたときに、そのアプリは元の画面のままですか。それともアプリの最初の画面に戻ってしまっていますか。いう機能は、アプリを元の状態に復元するための仕組みを提供します。メモリが不足してバックグラウンドのアプリが終了した後、次に起動したときに、アプリを元の状態に戻すことができます。ページなど、そういったものをそのまま残しておくことができます。このような復元が行われなければ、ユーザーはそれまでのコンテキストを失い、せっかく見つけたものを見失ったり、大切な言葉を忘れてしまったり、とてもがっかりしてしまうに違いありません。力を借りてみましょう。実現するための実装方法を紹介します。中では難しい部類の機能です。既存のアプリの設計では対応できないこともあります。しないで、粘り強く取り組んでほしいと思います。返すことで、保存されたり復元されたりするのを抑制できます。比較することで、復元するか判断できます。NSCoder)また上記のメソッドで、アプリケーション全体にわたる状態を保存・復元できます。具体的な保存と復元を担います。プロパティに値を入れる必要があります。上で設定することもできます。設定されていなければなりません。要素があると、それ以降は復元の対象になりません。復元できる必要があります。それぞれユニークである必要があります。位置を元にした識別子を付加していることがドキュメントで示されています。以下のふたつのメソッドで状態の保存と復元を行います。プロトコルに適合したオブジェクトやプリミティブな値ということになります。アプリケーション全体の復元が終わった後に以下のメソッドが呼ばれます。生成される場合はこれで十分です。コードだけで生成しているような場合には、これに加えてもうひとつ準備が必要です。インスタンスを生成して返すことになります。典型的な実装を以下に示しておきます。持つ場合に以下のメソッドが呼ばれます。値を再設定される方が好ましいと言えますが、例えばユーザーの入力値を保持しておくといった機能を持っているなら、これらのメソッドで復元可能にするのがよいでしょう。デフォルトで復元機能を持っていることがドキュメントで示されています。プロトコルを実装している場合に、要素の選択などといった状態を復元することができます。復元のライフサイクルよく注意しなければならないのは、復元されるタイミングです。実装する上での大きな障害に感じられるでしょう。前に復元が行われます。行う何らかの処理に依存するべきではありません。後に復元が行われます。値を設定していた場合、復元がうまくいかないことになります。ついても処理しなければなりません。適切にハンドリングしてくれます。適切に管理する必要があります。準拠していることに気がつくことでしょう。取り出すのがよいでしょう。調整しなければならないでしょう。あなたのアプリで実装しようとすると、おそらく設計上の多くの問題にぶつかることになるでしょう。典型的な問題についてヒントを示そうと思います。ともに再生成されればよいでしょう。取ってきたデータは、どこかに保存しておく必要があります。準拠していることを求めます。準拠していないことでしょう。準拠できないかもしれません。準拠する方法がありません。ひとつのやり方はディスク上に保存してしまうことです。そのデータが高々ひとつの画面で表示されるようなもので、他のデータと関連性を持たないような場合、何らかの方法で単純に保存するとうまくいくかもしれません。データの構造が複雑な場合には、データベースシステムを導入すると簡単です。他のものでも構いません。そのデータのプライマリーキーだけを保存・復元することにします。オーバーライドして指定します。その他のデータベースシステムでも類似の概念を得られるはずです。ために保存されるデータの容量を減らすこともできます。後にはこれは得られません。それを行うと、本来は同一のインスタンスへの参照だったものが、異なる複数のインスタンスができてしまうことになります。これを避けるために、インスタンス管理を行う方法があります。インスタンス管理の典型例は、シングルトンです。そのインスタンスへの参照を与えるやり方です。コンテナに相当する概念を導入することができます。メソッドで登録してしまうやり方があります。と独立したオブジェクトを復元できます。跨ぐようなオブジェクトも復元可能です。実装すると、状態が保存されるのと同時に画面のスナップショットが作成されます。次回の復元時にはこのスナップショットが先に表示されるので、ユーザーはシームレスに復元されたように感じます。メソッドを呼び出すことで、スナップショットが表示されるのを抑制できます。復元は基本的にメインスレッド上で行われますが、場合によっては他のスレッドを活用して並列に処理したいかもしれません。メソッドが利用できます。利用して非同期に復元処理を行い、後者のメソッドを呼び出します。このふたつのメソッドは必ずペアで呼び出さなければならないので注意してください。デバッグはやや困難です。