4

アプリのある画面から (モデルに) 保存したいデータ文字列がいくつかあり、ユーザーが同じページに戻った場合に取得します。現在、データはモデルに正常に保存されていますが、画面に戻るたびにコントローラーの新しいインスタンスを生成しているように見えるため、問題が発生しています。したがって、モデルへの参照を失うため、モデルは役に立ちません (現在、コントローラー内にインスタンス変数として保存されています)。私は何を間違っていますか?

4

4 に答える 4

3

私は何を間違っていますか?

通常、ドキュメントまたはアプリケーション全体で共有されるモデル (オブジェクトのコレクションである場合があり、1 つだけである必要はありません) があります。ビュー コントローラーが作成されると、モデル (またはモデルの一部) への参照が与えられます。次に別のView Controllerを作成すると、モデルへの参照がそのオブジェクトに渡されます。したがって、モデルはすべてのView Controllerによって共有されます。ビュー コントローラーの割り当てが解除されても、他のコントローラーがモデルを認識しているため、モデルは忘れられません。

モデルの始まりを持っているように聞こえますが、それは単一のビュー コントローラーに限定されています。他のビュー コントローラーでも同じ状況に陥っている可能性があります。これらの小さなモデルをすべて結び付けて、より大きなオブジェクト グラフにする方法を考えてみてください。これにより、覚えやすくなり、モデル全体をアプリ デリゲートやルート ビュー コントローラーなどの単一のオブジェクトに保存する責任を負うこともできます。

于 2012-05-15T20:48:21.537 に答える
0

おそらくNSUserDefaultsを使用して、モデルデータをディスクに永続化する必要があるようです。これは、このような少量のデータに最も適切なストレージメカニズムです。

于 2012-05-15T20:40:50.090 に答える
0

少なくとも次のいくつかのオプションを検討できます。

  1. Andrew が言ったように、NSUserDefaults を介してデータをディスクに永続化します。
  2. シングルトン デザイン パターンを使用して、アプリケーションの存続期間中データを永続化するデータ "マネージャー" オブジェクトを作成します。
  3. View Controllerの新しいインスタンスが作成されている理由を見つけようとし(コードを考えると、それは明らかであるか、それほど明白ではないかもしれません)、View Controllerを再利用するために少し異なることを試みます(あなたのコードを考えると、これは簡単または難しいかもしれません)コード)。

コメントで説明されているストーリーボードを使用していることを考えると、View Controller のナビゲーション パターンを変更することが本当に必要でない限り、オプション 2 を検討します。

于 2012-05-15T20:47:41.200 に答える
0

View Controller をナビゲーションにプッシュしてから戻ってくると、永続化されます。それでも、いくつかのデータを複数の画面で保持したい場合は、シングルトンインスタンスを使用することをお勧めします。

于 2012-05-15T21:12:55.197 に答える