9

Core Data モデルを使用するアプリを構築しています。私はObjective Cでかなり新しく、通常の設計パターンはCore DataとObjective Cには実際には適用されません.少なくとも、それらが適用されることを確認する例を見つけることができないようです.

私はインターチューブの Apple Developer の例とさまざまなソースを調べてきました。

Core Data を活用するには、それぞれの viewController に managedObjectContext を渡し、viewController に NSFetchedResultsControllerDelegate を実装させ、フェッチを実行するための各メソッドを実装し、その後実装する必要があるようです。

NSFetchedResultsChangeInsert

NSFetchedResultsChangeDelete NSFetchedResultsChangeMove NSFetchedResultsChangeUpdate

これにより、各 viewController に約 100 行以上のコードが追加されますが、90% は私が何度も書いた同じコードです。さらに、すべてを渡し、そのメモリ フットプリントを追跡する必要があります。

他の言語では、リクエストに応じてデータを維持および配信するためのメソッドを保持し、どこからでも利用できるいくつかのクラスのシングルトン モデルを構築します。Objective C でそのアプローチを取ることはできないようです。managedObjectContext を取得して必要なものを返す静的クラスを構築する場所がある場合、すべてのビューに managedObjectContext を渡す必要があり、そうではありません。結果の準備ができたときに呼び出されるデリゲート メソッドを実装するときのように、非同期的に。

これが理にかなっており、誰かがそれを行うための合理的な方法が他にないことを確認するか、これを良い方法でまとめる方向に私を向けるのを手伝ってくれることを願っています.

ありがとう:)

4

2 に答える 2

19

Core Data は、あなたが説明するほど複雑ではありません。

通常、iPhone アプリには「メイン」の管理対象オブジェクト コンテキストがあり、これは通常、アプリのデリゲートによって所有されます。アプリ デリゲート (ヒント: [[UIApplication sharedApplication] delegate]) を取得できる限り、管理対象オブジェクト コンテキストにアクセスできます。生活を楽にするために、アプリのデリゲートへの参照を保持する静的グローバル変数を定義するのが好きです。

NSFetchedResultsController通常、インスタンスとインスタンスの間には 1 対 1 の対応がありUITableViewます。テーブル ビューの作成は別として、NSFetchedResultsController. 同様のビューが多数ある場合 (たとえば、iPod アプリのように同じデータをさまざまな方法で表示できるタブ バー)、 を構成する単一の基本クラスを作成し、NSFetchedResultsControllerそこから特定のビュー コントローラーを派生させることをお勧めします。それ。

ここで、オブジェクトを編集するためにビュー コントローラーを作成するときは、通常、別のマネージド オブジェクト コンテキストでそれを行うことをお勧めします。ユーザーがキャンセルした場合、コンテキストを破棄するだけで変更はなくなります。NSFetchedResultsController繰り返しますが、これらのビューは 1 つのオブジェクトのみに関係しているため、実際には は必要ありません。

編集が完了するとsave:、管理対象オブジェクトのコンテキストが表示されます。他の管理対象オブジェクト コンテキストを管理するオブジェクトはNSFetchedResultsControllerDelegate、テーブル ビューの同期を維持するためのメソッドを実装する必要があります。繰り返しますが、これは基本クラスに実装できるため、関連するビュー コントローラーに対してこの機能を一般化できます。

于 2009-10-24T17:29:36.537 に答える
0

絶対に CoreData モデルを使用する必要がありますか、または NSCoder (NSArchiver、NSKeyedArchiver など) を使用するものは機能しますか? CoreData は、ほとんどのアプリケーションにとってやり過ぎであることがわかりました。

また、シングルトンを使用したアプローチをとれない理由を明確にしていただけますか? 多くのアプリケーションで問題なくシングルトン ファクトリを使用しました。共有 (シングルトン) インスタンスで動作するクラス レベルのメソッドを定義するのはかなり簡単です。

于 2009-10-24T17:38:02.167 に答える