View Controller間で通信するための最良の方法は何ですか?
一般的に、objective-c、cocoa、iPhone devの初心者なので、言語とフレームワークを最大限に活用したいという強い思いがあります。 私が使用しているリソースの1つは、スタンフォード大学のCS193Pクラスのメモで、Web上に残したものです。講義ノート、課題、サンプルコードが含まれており、コースはApple開発者によって提供されたので、間違いなく「馬の口から」であると考えています。 クラスのウェブサイト:http : //www.stanford.edu/class/cs193p/cgi-bin/index.php レクチャー08は、UINavigationControllerスタックにプッシュされた複数のUIViewControllersを持つUINavigationControllerベースのアプリを構築する割り当てに関連しています。これがUINavigationControllerの仕組みです。それは論理的です。ただし、スライドには、UIViewControllers間の通信に関する厳しい警告がいくつかあります。 この深刻なスライドから引用します。http: //cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf ページ16/51: データを共有しない方法 グローバル変数またはシングルトン これにはアプリケーションデリゲートが含まれます 直接的な依存関係により、コードの再利用性が低下します そして、デバッグとテストがより難しい OK。私はそれに落ち込んでいます。ビューコントローラーとアプリデリゲートの間の通信に使用されるすべてのメソッドを盲目的に放り投げたり、アプリデリゲートメソッドでビューコントローラーインスタンスを参照したりしないでください。フェアナフ。 少し先に、このスライドで何をすべきかを説明します。 ページ18/51: データフローのベストプラクティス 把握を正確に伝達する必要があるもの ビューコントローラーの入力パラメーターを定義する 階層を遡って通信するには、疎結合を使用します オブザーバー(委任など)の汎用インターフェースを定義する 次に、このスライドの後にプレースホルダースライドのように見えるスライドが続きます。ここで、講師はUIImagePickerControllerの例を使用してベストプラクティスを明らかに示します。ビデオが利用可能になればいいのに!:( はい、そうです...私のobjc-fuはそれほど強くありません。上記の引用の最後の行にも少し混乱しています。私はこれについてグーグルの私の公平な分け前をしていて、観察/通知技術のさまざまな方法について話しているまともな記事であると思われるものが見つかりました:http : //cocoawithlove.com/2008/06/five-approaches-to -listening-observing.html メソッド#5はデリゲートをメソッドとしても示します!例外...オブジェクトは一度に1つのデリゲートしか設定できません。それで、複数のビューコントローラー通信がある場合、どうすればよいですか? OK、それはセットアップのギャングです。アプリデリゲート内の複数のビューコントローラーインスタンスを参照することで、アプリデリゲートで通信メソッドを簡単に実行できることはわかっていますが、このようなことを正しい方法で実行したいと考えています。 次の質問に答えて、「正しいこと」をしてください。 UINavigationControllerスタックに新しいビューコントローラーをプッシュしようとすると、このプッシュを実行する必要があります。 私のコードのどのクラス/ファイルが正しい場所ですか? 別の UIViewControllerにいるときに、UIViewControllersの1つにあるデータ(iVarの値)に影響を与えたい場合、これを行う「正しい」方法は何ですか? オブジェクトに一度に設定できるデリゲートは1つだけで、講師が「オブザーバー(デリゲートのような)の汎用インターフェイスを定義する」と言ったときの実装はどのようになると想定してください。可能であれば、疑似コードの例が非常に役立ちます。