2011-08-08 13 views
1

私のAppDelegateでは、JSONフィードからデータをダウンロードします。私はいくつかのチャンネルのために今/次/後のスケジュールをダウンロードしています。私は3つの異なるView Controllerをそれぞれ、次に、そして後で持っています。各ビューコントローラにおいて、ユーザはチャンネルを追加/削除することができるので、そのようになると、新たに追加されたチャンネルデータを再びダウンロードしなければならない。Objective-Cの代理人と通知

データがAppDelegateにダウンロードされてそこに保存されるので、3つのビューコントローラにどのように渡しますか?私は3人の別々の代議員を実装すべきですか?新しいチャンネルを追加するときは、そのデータをもう一度ダウンロードする必要があります(これはAppDelegateの外で行っています)。

お願いします。

ありがとうございました

答えて

1

これは基本的にスタイルの問題であり、あなたのアプローチはそれほど無効ではありません。

私は別のやり方をしていますが、AppDelegateは単なるツールとして使用されるものではなく、複数のAppDelegatesを同時に持つことは不可能です。ここで

が(それはもちろん、唯一の正しい方法ではないのですが)これを行うことができる方法についていくつかの考えです:

  • まず、私はコアデータやから入手可能であるストレージの他のいくつかの並べ替えを使用したいですあなたのアプリ内のどこにでも。
  • 次に、ある種の「データコントローラ」クラス(たぶんシングルトン)を紹介します。このクラスは、要求されたときに、データのダウンロードとそのデータのViewControllerへの配布の両方を処理する必要があります。
  • この目的のために1つのセントラルコントローラを用意することで、コントローラがすでにストックされているデータを正確に把握できるため、データが1回だけダウンロードされるようにすることができます。
  • あなたのビューコントローラは、もはやダウンロード管理の責任を負いませんし、ディスク上のデータにアクセスすることもありません。リクエストされたデータがディスク上にあった場合でも、ダウンロードされた場合でも、データコントローラにリクエストしてコールバックを取得するだけです。
  • これにより、VCのスリム化と集中化が図られ、インターフェイスの変更に伴う苦労が軽減されます。
+0

私はあなたのアプローチで行くと思います。コアデータは、各起動時に特定のデータセットがリフレッシュされるので、私は必要ありません。ちょうどもう1つの質問、私はまた、データ要求の接続を実装し、シングルトンクラスでダウンロードするか、ダウンロードしたデータのストレージとしてシングルトンクラスを使用する必要がありますか?何が良いですか? – darksky

+0

私はそう、私はデータコントローラでも実装すると思います。あなたのプロジェクトをもっと詳しく知ることなく私が見ることができない理由があるかもしれませんが、そうでなければ私は決断を下すでしょう。しかし、いずれにしても、私はビュー・コントローラーにダウンロードを管理する負担をかけないでしょう。作業を厳密に分離したい場合は、データコントローラに付属するダウンロードコントローラを用意することをお勧めします。しかし、これもスタイルと保守性の問題です。どちらのアプローチも同様にうまくいくかもしれません。 – Toastor

1

トースト氏の答えは正しいですし、彼が言うように、これを行うにはいくつかの方法があります。 1つは、データアクセスクラスを呼び出して値を変更するか、値の変更をリッスンすることです。後で、Key-Value Observing Programming Guideは、次の言葉:

KVOは、アプリケーション内のモデルと コントローラ層との間の通信のために特に有用です。

  • コントローラオブジェクトは、典型的には、モデル オブジェクトのプロパティを観察し、ビューオブジェクトはモデルの特性が、コントローラを介して オブジェクト観察します。
  • しかし、モデルオブジェクトは、他のモデルの オブジェクト(通常は従属値が変更されるときを決定する)または 自体(従属値がいつ変更されるかを再度決定する)を観察することがあります。

もう多分あなたのアプリデリゲートに保存されたデータアクセスクラスを渡して、依存関係を明示することです。 Object-oriented design question, iPhoneを参照してください。