NSPsistentStoreCoordinator с двумя типами постоянных хранилищ?

В приложении iOS я хотел бы использовать NSPersistentStoreCoordinator с подклассом NSIncrementalStore, для получения данных из REST API, а также с хранилищем SQLite для сохранения на диск. Однако, если я добавлю оба типа постоянных хранилищ моему координатору, вызов save: в моем контексте управляемых объектов не будет иметь никакого эффекта. Если я добавляю только одно постоянное хранилище, а не тип для моего подкласса NSIcrementalStore, то сохранение работает по назначению.

Есть ли способ достичь этой функциональности?

Ответ 1

Лучшим решением в моем опыте является наличие нескольких контекстов управляемых объектов, каждый из которых имеет свою собственную модель.

Однако есть способ выполнить то, что вы хотите:

// 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:

Руководство по программированию основных данных - Координатор постоянных хранилищ

SO: Возможны два постоянных хранилища для одного контекста управляемого объекта?

SO: Может ли два контекста управляемого объекта совместно использовать один постоянный координатор хранилища?

Также проверьте комментарий TechZen во второй ссылке о конфигурациях и прочитайте об этом здесь:

Руководство по программированию основных данных - Конфигурации

и вот хороший учебник для управления двумя объектными контекстами:

Несколько управляемых объектных контекстов с основными данными