Сохранение объектов из нескольких хранилищ в одном постоянном хранилище - PullRequest
2 голосов
/ 23 февраля 2012

У меня есть два постоянных магазина с объектами, которые используют одну и ту же модель.Я хотел бы открыть оба магазина в одном контексте, но сохранить контекст только в одном магазине, а затем безопасно удалить один из магазинов.По сути, я пытаюсь объединить содержимое двух постоянных хранилищ в одно постоянное хранилище.Поскольку у сущностей есть отношения, я нахожу это трудным.

С этот ответ :

Если вам нужно иметь отношения между объектами в обоих магазинахили вы просто хотите иметь один магазин, лучше всего было бы создать второй NSPersistentStoreCoordinator и третий отдельный постоянный магазин для хранения графа объединенных объектов.Вам нужно будет написать код для создания копий объектов в контексте управляемого объекта, присоединенного к этому второму NSPersistentStoreCoordinator.Вам нужно будет установить те же отношения между копиями, что и у исходных объектов, но то, как вы это сделаете, зависит от вашей модели данных.

Это делает это понятным, кромедля деталей, как, буквально, сделать копии объектов для нового магазина.Это проблема миграции?

1 Ответ

0 голосов
/ 27 февраля 2012

В конечном итоге я использовал следующий подход:

[migrator migrateStoreFromURL:[NSURL fileURLWithPath:incomingPath]
                         type:nil 
                      options:nil 
             withMappingModel:managedObjectModel 
             toDestinationURL:[NSURL fileURLWithPath:finalPath] 
              destinationType:nil 
           destinationOptions:nil 
                        error:&err];

[persistentStoreCoordinator removePersistentStore:[[persistentStoreCoordinator persistentStores]lastObject] error:&err];

Файл в "inputPath" был хранилищем, которое я импортировал, файл в "finalPath" - это уже существующее хранилище, в которое я хотел объединиться. Оба хранилища были открыты в одном и том же постоянном координаторе, и оба используют одну и ту же объектную модель. Затем я удалил входящий магазин и больше никогда не просматривал его; Полагаю, я мог удалить его на уровне файловой системы.

Для моих конкретных потребностей в данных я затем извлек все записи, отобрал дубликаты и сохранил контекст.

Я публикую этот ответ, потому что, будучи новичком в основных данных, эта простая миграция решила проблему «не может сохранить отношения с объектами в разных хранилищах» неинтуитивно.

...