2009-05-19 14 views
2

私はTableViewsとSQLiteデータベースに大いに依存しているiPhone Appを持っています。データはどこに保存しますか?私の場合、App DelegateのWebからデータを取り出しAppDelegateに格納し、定期的にDBに保存します。データを保存するためのベストプラクティスiPhoneアプリ

rootviewcontrollerは、appdelegateオブジェクトを読み取り、それ自身を読み込むtableviewです。

しかし、Evan Doll(スタンフォード講義)によれば、AppDelegateにデータを格納することは一見悪い設計であるようです。私は後でそれを支払うことになりたくありません。誰もがこのソリューションのより良い選択肢を提案できますか?

答えて

7

私自身のために、私はある種のMVC構築を作成しました。私はDataManager(シングルトン)を持っています。これは配列や辞書に必要なすべてのデータ(主にモデルで表現されています;プレーンなNSObjects)を保持しています。

ビュー(NibファイルとViewControllers)は、データを取得するためにDataManagerと通信します。データがDataManagerにすでに存在する場合は、通知を介してデータを返します。そうでなければ;それはコントローラにコールを転送し、コールを取得します。

このコントローラでは、オンラインの場合はコールがXMLリクエストで、オフラインの場合はSQLiteデータベースへのコールで、オフライン/オンラインのモデュールでコールを分離します(おそらく重要ではないでしょう)。

コントローラは、DataManagerでデータを設定し、通知をViewにディスパッチできます。

次に、サイクルが再び開始され、ビューはDataManagerを介してデータにアクセスできます。 これはすべて非同期呼び出しで発生するため、通知(DataManagerまたはコントローラにビューを混乱させる場合、スレッドセーフではありません)。

私のAppDelegateは、メインビュー、コントローラ、およびDataManagerの最初の初期化のみを行い、それ以降は引き継ぎます。

あなたのモデル(データ)を中央の場所に置くことは良いことです。多くのクラス依存関係を作り出すことなく、すべてのクラスを通して簡単にアクセスできます。私は等のデータのためのデータマネージャー、非同期URL要求のDownloadManager、XMLパーサ、NSDictionariesからモデルを構築するための工場、DatabaseConnector、のように、また別のクラスに機能のほとんどの種類を分割

など

+0

すてきなデザイン。私のアプリで間違いなくそれを使用します:) – lostInTransit

+0

私は.NET開発で同じことをやって、静的クラスをApp_Codeに配置します。たとえば、People.csにはGetPerson(int id)やGetAllPeople()というメソッドがあります。 iPhoneの場合、これらのデータアクセスファイルはどこに置かれ、どの名前が適切なのでしょうか。 – Picflight

+0

あなたのアプローチを共有していただきありがとうございます。これはまさに私が探しているものです。私は.NET開発者であり、iPhone開発の道を開いています。あなたのアプローチは、.Netの世界でのやり方と非常によく似ています。あなたはDataManagerで通知の使用を拡大してください。 –

関連する問題