アプリのある画面から (モデルに) 保存したいデータ文字列がいくつかあり、ユーザーが同じページに戻った場合に取得します。現在、データはモデルに正常に保存されていますが、画面に戻るたびにコントローラーの新しいインスタンスを生成しているように見えるため、問題が発生しています。したがって、モデルへの参照を失うため、モデルは役に立ちません (現在、コントローラー内にインスタンス変数として保存されています)。私は何を間違っていますか?
4 に答える
私は何を間違っていますか?
通常、ドキュメントまたはアプリケーション全体で共有されるモデル (オブジェクトのコレクションである場合があり、1 つだけである必要はありません) があります。ビュー コントローラーが作成されると、モデル (またはモデルの一部) への参照が与えられます。次に別のView Controllerを作成すると、モデルへの参照がそのオブジェクトに渡されます。したがって、モデルはすべてのView Controllerによって共有されます。ビュー コントローラーの割り当てが解除されても、他のコントローラーがモデルを認識しているため、モデルは忘れられません。
モデルの始まりを持っているように聞こえますが、それは単一のビュー コントローラーに限定されています。他のビュー コントローラーでも同じ状況に陥っている可能性があります。これらの小さなモデルをすべて結び付けて、より大きなオブジェクト グラフにする方法を考えてみてください。これにより、覚えやすくなり、モデル全体をアプリ デリゲートやルート ビュー コントローラーなどの単一のオブジェクトに保存する責任を負うこともできます。
おそらくNSUserDefaultsを使用して、モデルデータをディスクに永続化する必要があるようです。これは、このような少量のデータに最も適切なストレージメカニズムです。
少なくとも次のいくつかのオプションを検討できます。
- Andrew が言ったように、NSUserDefaults を介してデータをディスクに永続化します。
- シングルトン デザイン パターンを使用して、アプリケーションの存続期間中データを永続化するデータ "マネージャー" オブジェクトを作成します。
- View Controllerの新しいインスタンスが作成されている理由を見つけようとし(コードを考えると、それは明らかであるか、それほど明白ではないかもしれません)、View Controllerを再利用するために少し異なることを試みます(あなたのコードを考えると、これは簡単または難しいかもしれません)コード)。
コメントで説明されているストーリーボードを使用していることを考えると、View Controller のナビゲーション パターンを変更することが本当に必要でない限り、オプション 2 を検討します。
View Controller をナビゲーションにプッシュしてから戻ってくると、永続化されます。それでも、いくつかのデータを複数の画面で保持したい場合は、シングルトンインスタンスを使用することをお勧めします。