4

CoreData を使用したアプリケーションの作成を始めたばかりですが、MVC フレームワークを使用して (および開発して) Web 開発で多くの作業を行っていたため、MVC の概念に精通しています。

私が収集したものから、CoreData は NSManagedObject から継承するクラスを自動的に生成します。オブジェクトは、コンテキストへのフェッチ要求によって、またはコンテキストに新しいオブジェクトを挿入することによって作成されます。私が見たアプリでは、オブジェクトはデータベース内の属性に対応するプロパティを除いて空であり、基本的にエンティティのテーブルの行を模倣するオブジェクトになっています。

これらの自動的に生成されたクラスと CoreData 自体がアプリケーション モデルを構成していることは理にかなっています。私が伝統的に作ってきたアプリでは、代わりにModelすべてのデータの処理を担当するクラスがあります。多くの場合、これは Singleton クラスであり、モデルを必要とする各コントローラーは単純に を使用できますself.model = [Model sharedInstance];。大規模なアプリの場合、1 つの巨大なモデルではなく、複数のモデルが存在する場合があります。あなたは絵を手に入れます。私の最初の質問は次のとおりだと思います:私は正しいですか?CoreData とそれに関連付けられている NSManagedObject は、アプリケーションのモデル全体を構成していますか?

アプリケーションには、CoreData オブジェクトが割り当てられていないデータを処理する他の機能が必要になる場合があるため、これは間違っていると思います。例: CoreData アプリケーションが、foo.com/test から HTTP 要求を介して取得したデータ (JSON データとしましょう) をテーブル ビューに入力する必要があるとします。このデータは CoreData に格納する必要はありませんが、同時に、データの取得と解析はコントローラーの仕事ではないと思います。foo.com からのデータを管理するための HTTP 要求を処理するオブジェクトFooDataManager(またはそのようなもの) が存在する必要があります (AFHTTPClient を拡張できます)。そして、foo.com を扱うコントローラーにはfooDataManager、そのコントローラーのモデルとして機能する のプロパティがありますか? そして、コントローラーは[self.fooDataManager retrieveAndParseData];?を呼び出します。

CoreData アプリの開発を開始する前に、この情報を確認して、最初から正しく実行できるようにしたいと考えています。Web開発では、コントローラーごとに1つのモデルを持つことに慣れていますが、iOSでは、すべてが独自のことを行う多くのモデル、それらのモデルを使用する多くのコントローラー、およびそれらすべてのモデルが追加されているようですCoreData および NSManagedObjects に。

4

1 に答える 1

2

私が収集したものから、CoreData は NSManagedObject から継承するクラスを自動的に生成します。

いいえ。特定のエンティティが作成した NSManagedObject サブクラスを使用することを指定しない限り、Core Data によって返されるオブジェクトは NSManagedObject のインスタンスです。

私の最初の質問は次のとおりだと思います:私は正しいですか?CoreData とそれに関連付けられている NSManagedObject は、アプリケーションのモデル全体を構成していますか?

それはアプリケーションによって異なります。上記のように、特定のエンティティを提供する NSManagedObject サブクラスにマップする場合は、それを行うことができます。これは、エンティティのプロパティのアクセサーだけでなく、データ オブジェクトにメソッドを含める場合に役立ちます。たとえば-compare:、特定の順序での並べ替えを容易にするメソッドや、-getCurrentImageWeb サーバーから製品画像を取得するメソッドを実装できます。また、モデルには、フェッチ要求などを処理する 1 つ以上のモデル コントローラー クラスが含まれている場合があります。そのため、プログラムの残りの部分は、モデルが Core Data を使用していることを認識する必要さえありません。

アプリケーションには、CoreData オブジェクトが割り当てられていないデータを処理する他の機能が必要になる場合があります... CoreData アプリケーションが、foo.com/test からの HTTP 要求によって取得されたデータをテーブル ビューに入力する必要がある場合はどうでしょうか。

その機能を別のクラスに入れ、モデルの一部と考えることは絶対にできます。それはおそらく良い考えだと思います。多くの iOS プログラマーは、それが都合の良いように見えるという理由だけでおそらくそれをビュー コントローラーに入れるでしょうが、それをモデルの一部にすることがより良い計画であることに同意します。

于 2012-09-07T21:12:49.437 に答える