2

によって管理されている 2 つのテーブル ビューと詳細ビューがありUINavigationControllerます。2 番目のテーブルで行を選択すると、その行が表す特定のデータを変更できる詳細ビューが表示されます。UIViewControllers で変更された可能性のあるデータ (ボタンの選択、フィールドに入力されたテキスト値など) を失うことなく、UITableViewとを切り替えることができる必要があります。UIViewController

基本的に、UIViewControllerが表示されると、データを失うことなく、テーブルと詳細ビューを切り替えることができるはずです。

問題は、UIViewControllerナビゲーション コントローラーから がポップされると、そのメモリが自動的に解放され、ARC を使用しているためretainUITableView.

対応するテーブル行が選択されるたびにビューを手動で再構築できることはわかっていますが、それは面倒な解決策になると思います。私が考えた別のオプションは、プッシュされた配列を保持しUIViewControllers、選択したテーブル行が新しい値が作成される前に既存の値と一致するかどうかを確認することですが、これも面倒になる可能性があります。

助言がありますか?

4

3 に答える 3

0

あなたが提案したように、これにはいくつかの解決策があります。

アレイソリューションは、メモリの問題のために非常に非効率的です。

あなたが提案した2番目の解決策ははるかにエレガントです。そのViewControllerに独自のinitメソッドを記述し、plistファイルのデータを使用してViewControllerを初期化するだけです。

于 2012-09-12T15:41:38.310 に答える
0

この前後のビューでの最後の願いは、質問で述べたことです。これらのコントローラーで実行されたアクションの情報を失うことなく、View Controller を切り替えたいと考えています。しかし、MVC パターンがどのように機能するかを考える場合は、View Controller をビューとモデルの間のグルー ロジックと見なす必要があります。ビューは永続的ではないため、ビューが不要になったときに ARC が所有しているビュー コントローラーを削除することは正当です。代わりに、アプリの動作中に保持する必要があるのはモデル データのみです。モデル データは関連するビュー コントローラー間で共有され、ビュー コントローラーは毎回再作成され、対応するビューはモデル データに基づいて更新されます。ビュー コントローラーを有効にしておく必要がある唯一の理由は、その alloc-init-loadView に時間がかかりすぎる場合です (e.

したがって、基本的に行うべきことは次のとおりです。-テーブルを選択します-ビューコントローラーに関連するすべての情報を含む、テーブルに関連付けられたモデルデータを抽出します-ビューコントローラーをプッシュします; すべてのビューの変更をモデルに保存します - ビュー コントローラーがポップされると、モデル データのみが返されます - 次回、ビュー コントローラーを再度押すと、モデルが復元され、ビュー コントローラーが再初期化されます。

このアプローチは複雑ではなく、クリーンな方法でアプリを構築する可能性を提供します。明日は、モデルの受け渡しのみによって管理されるため、他のView Controllerとの通信に影響を与えることなく、View Controller構造(そのビューとロジック)を変更できます。

于 2012-09-12T15:54:56.180 に答える
0

質問を正しく読んでいれば、同じモデルデータによって駆動される tableView と detailView があります。詳細ビューでモデル データが変更された場合、それらの変更を保持する必要があります。

詳細ビューがポップされたときのコントロールの状態に基づいてモデルを更新すると、それらの変更が保持され、次に詳細ビューにドリルダウンしたときに変更が表示されます。

NSArrayテーブルデータがどのような形式であるかについては言及していませんが、それがof であると仮定しましょうNSMutableDictionaries。行をタップすると、didSelectRowAtIndexPath:メソッドは、詳細コントローラーのプロパティを介して、その配列インデックスから詳細ビュー コントローラーにディクショナリを渡す必要があります。詳細ビュー コントローラーは、それを閉じるメソッドで辞書の値を更新します。

これを考える方法は、model-view-controller パターンを使用することです。テーブルと詳細ビューのデータはモデルに保存されます。ビューはデータを表示します。コントローラーは、モデルの更新とビュー間の移動を担当します。

于 2012-09-12T15:59:53.247 に答える