10

iOS アプリでは、REST API からデータをフェッチするためのサブクラスと、ディスクに保存するための SQLite ストアのNSPersistentStoreCoordinator両方でを使用したいと考えています。NSIncrementalStoreただし、両方のタイプの永続ストアをコーディネーターに追加するとsave:、管理対象オブジェクト コンテキストを呼び出しても効果がありません。サブクラスのタイプではなく、永続ストアを 1 つだけ追加するとNSIcrementalStore、保存は意図したとおりに機能します。

この機能を実現する方法はありますか?

4

1 に答える 1

10

私の経験では、それぞれが独自のモデルを持つ複数の管理対象オブジェクト コンテキストを持つことが最善の解決策です。

ただし、目的を達成する方法があります。

// create the store coordinator
NSPersistentStoreCoordinator *storeCoordinator = [[NSPersistentStoreCoordinator alloc] init];
// create the first store
NSPersistentStore *firstStore = [storeCoordinator addPersistentStoreWithType: NSIncrementalStore configuration:nil URL:urlToFirstStore options:optionsForFirstStore error:&error];
// now create the second one
NSPersistentStore *secondStore = [storeCoordinator addPersistentStoreWithType:NSSQLiteStore configuration:nil URL:urlToSecondStore options:optionsForSecondStore error:&error];

// Now you have two stores and one context
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:storeCoordinator];

// and you can assign your entities to different stores like this
NSManagedObject *someObject = [[NSManagedObject alloc] initWithEntity:someEntity insertIntoManagedObjectContext:context];
// here the relevant part
[context assignObject:someObject toPersistentStore:firstStore]; // or secondStore ..

Core Data がどのように機能するかをよりよく理解するには、次のリンクも確認してください。

Core Data プログラミング ガイド - 永続ストア コーディネーター

SO: 1 つの管理対象オブジェクト コンテキストに対して 2 つの永続ストア - 可能ですか?

SO: 2 つの管理対象オブジェクト コンテキストが 1 つの永続ストア コーディネーターを共有できますか?

また、構成に関する 2 番目のリンクの TechZen によるコメントを確認し、ここでそれについて読んでください。

Core Data プログラミング ガイド - 構成

そして、これは2つのオブジェクトコンテキストを管理するための素晴らしいチュートリアルです:

コア データを含む複数の管理対象オブジェクト コンテキスト

于 2012-09-08T01:05:02.470 に答える