1

私はこれについて考えていて、View Controller間で通信するための最も推奨される方法に関する別のstackoverflowの質問を読みました。ただし、その質問/回答は、逆の動作に対する最善のアプローチに対処していないようです。

つまり、 からParentControllerにデータを渡すには、 のようModalControllerに初期化できます。ModalControllerinitWithDataToProcess:

しかし、逆のことをしたい場合はどうすればよいでしょうか? 新しいデータについて以前のコントローラーに通知するにはどうすればよいですか?

例: ユーザーが の [新しい人] ボタンをクリックしますParentController。新規作成を開始し、ModalControllerを介してユーザーに個人エディター ビューを表示しpresentModalViewController:ます。ユーザーは「完了」をクリックして、新しい人を追加します。IdismissModalViewController:と UI が のビューに戻りますParentController

シングルトン オブジェクト (アプリ デリゲートなど) でグローバルフィールド参照を使用するのは良くありません。委任(正式なプロトコル経由) と通知(NSNotificationCenter 経由) はやり過ぎのようです。助言がありますか?

4

2 に答える 2

1

通常、通知を使用する方がクリーンです。このようにオブザーバーを追加するだけです....

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(somethingHappened:) name:@"MyNotification" object:nil];

コードの他の場所では、必要なときにいつでも通知を投稿できます。

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self];

この例では自分自身を渡していますが、実際に必要な任意のオブジェクトを渡すことができ、それはあなたの somethingHappened: 関数に供給されます

重要なことは、@"MyNotification" を非常にわかりやすくユニークなものにすることです。プロジェクト名を最初に追加することは、物事を一意に保つための良い方法です...例. @"ProjAXViewHasGotData"

于 2010-10-15T19:06:35.233 に答える
0

デリゲートは、実行できる最低限の機能です。このための新しいプロトコルを宣言するのが面倒だと思われる場合は、親ビュー コントローラーを渡して、モーダル ビュー コントローラーでメソッドを呼び出すようにします。

于 2010-10-15T16:10:09.957 に答える