0

モデル作成の手引きと、ViewControllersからモデルにアクセスする方法について私の選択肢は何ですか?アプリケーションが簡単ではなく、単一のモデルを複数のViewController間で共有する必要がある場合、モデルの作成場所とViewControllersのアクセス方法はどこですか?Cocoa Touchでのモデルへのアクセスと作成

IOC/Dependency Injectionまたは最悪のモデルロケータを使用してこの問題を解決する多数のActionscriptフレームワークがありますが、Cocoa Touchには匹敵するものはないようです。数多くのコード例で見回しから投射することは、ほとんどの人は、次のいずれかを実行しているようです:

  1. は、少なくとも、手段、レジストリの一種としてそれを使用して(ApplicationDelegateでそのモデルを宣言し、その介してそれらにアクセスモデル自体はシングルトンである必要はなく、テストして最終的には難しいとひどく設計されていない。彼らのViewControllers間

  2. パスモデルの周りに(明白な理由のために悪い)

  3. シングルトンとしてすべてのモデルがありますしています多くの不必要なコードとca他のViewControllerへの参照を実際にアクセスする必要なしに、いくつかのViewControllerがModelへの参照を参照することになります。

確かにそこには良い解決策がありますか?フレームワークはUIViewとViewControllers間の親密な接続を規範としていますが、モデル/サービス層を接続するためのガイダンスや解決策はありません。私は明白な何かを欠いていますか

答えて

0

モデルのサイズによっては、コアデータに「接続」がありません。 Core Dataを使用すると、モデルをView Controllerに結び付け、そのデータをビュー全体にシャトルすることができます。

コアデータを使用する予定がない場合は、モデルテンプレートが提供されていない理由は、実際には何も特別なものがないからです。データの保存と廃棄に役立つ特定のクラスがあります(たとえばNSCacheを参照)。ただし、モデルクラスはいくつかのパブリックプロパティやカスタムアクセサリを持つNSObjectサブクラスにすることができます。

AppDelegateは、アプリケーションが必要な場合にそのようなオブジェクトにアクセスするための妥当なアプローチのようなものです。実際にあなたの特定のアプリケーションに意味をなさない限り、各ビューコントローラーが必要とするモデルの部分だけにアクセスすることをお勧めします。必要に応じて、「遠方から」アクセスできる特定のタイプのモデルデータに対して、常にView Controllerをデリゲートにすることができます。

私は助けてくれることを願っています - 申し訳ありませんが、質問を誤解しました!

+0

CoreData、KVO、Notificationsの間私は、モデルを作成してアプリケーションの残りの部分と通信するためのツールに満足していますが、モデルが作成され、アクセスが途絶えているようですダウン。 AppDelegateを一種のレジストリとして使うのは便利ですが、それはそれが目的ではありません。モデルのデリゲートとしてViewControllerを持っているのは間違いです。答える時間をとってくれてありがとう。 – Undistraction

+0

@ 1ndivisible:どうしてこのような方法でデリゲートとしてView Controllerを使用するのが "間違っている"のですか?モデルからビューへ、またはその逆のメッセージをシャトルするのは、MVCデザインパターンでコントローラーの役割です。コントローラのプロトコルを定義することは、モデルデータにアクセスするための関連するメソッドをグループ化する便利な方法です。興味のない方は、アップルの[Cocoa Design Patterns](http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html%23)のリファレンス(「Theモデル - ビュー - コントローラ設計パターン ")? – Stuart

+0

リンクをありがとう。それは素晴らしい文書です。モデルが委任を行っている場合、View Controllerをデリゲートとして使用することは間違っています。モデルは他のアプリケーション層では何も知らないはずです。 KVOと通知は、この分離を可能にします。リンクされたドキュメントから引用するには: 'モデルクラスは、他のモデルクラス以外のものに依存してはいけません。' – Undistraction

関連する問題