0

私は今ではこれを知っているはずですが、私はまだ少し混乱しています. アプリが (ナビゲーション コントローラーを介して) あるビュー コントローラーから次のビュー コントローラーに移動するとき、次の VC に移動する前に、現在の VC のデータを「ファイナライズ」したいと考えています。「ページスワップ」をインターセプトする唯一の方法は、[古いビュー viewWillDisappear] -> [newView viewWillAppear] トランジションにあります。奇妙に思えますが、問題なく動作すると思います。

それは本当にナビゲーション遷移を処理する正しい方法ですか? 私のアプリは、データベース ファイルをまとめて構築する一連の VC です。各 VC は、データのさまざまな側面を処理します。

4

2 に答える 2

0

「ファイナライズ」部分とは正確には何ですか?さまざまなフィールドのビューコントローラーに状態を保存していて、次のビューに進む前にそれをデータベースファイルに書きたいと思いますか?

「ビューコントローラーの編集」に関しては、ナビゲーションコントローラーにプッシュする前に、プロパティを介して注入される単純なモデルオブジェクトにビューコントローラーが直接書き込むようにするのが良い方法だと思います。

次のようなものです:

/* Somewhere in the app delegate, like application:didFinishLaunching */
DatabaseFileModel *model = ...;

viewController1.model = model;
viewController2.model = model;

/* ... */

[self.window makeKeyAndVisible];

次に、各View Controllerは、テキストフィールドの編集などが終了したときにプロパティなどを設定して、このモデルに書き込みます。ビュー コントローラーがオブジェクトに直接書き込むということは、viewWillDisappear などを処理する必要がないことを意味します。

それでもこれを行う必要がある場合は、デリゲートをナビゲーション コントローラーに追加して、次の 2 つのメソッドを処理できます。

– navigationController:willShowViewController:animated:
– navigationController:didShowViewController:animated:

詳細については、UINavigationControllerDelegateのドキュメントを参照してください。

これにより、各ビュー コントローラーに分散するのではなく、ロジックを 1 か所に保持できます。

于 2010-07-21T10:10:16.020 に答える
0

あなたの正確な設定がわからないので、これは役に立たないかもしれませんが-(void)textFieldDidEndEditing:(UITextField*)tf、 を使用tf.tagしてフィールドにインデックスを付けて にデータを保存した経験があります。そこからデータをストレージ クラスにコミットし、UI で何が起こるかを心配する必要はありません。

于 2010-07-21T01:20:22.123 に答える