Базовые данные позволяют вам добавить несколько постоянных хранилищ к одному имени NSPersistentStoreCoordinator
(каждое со своей конфигурацией), объединяя их в одно NSManagedObjectContext
. Я не смог выяснить, как Core Data обрабатывает атомарность операции сохранения для нескольких хранилищ.
Допустим, у меня есть два магазина:
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] init];
[coordinator addPersistentStoreWithType:type configuration:@"A" URL:aURL options:nil error:NULL];
[coordinator addPersistentStoreWithType:type configuration:@"B" URL:bURL options:nil error:NULL];
NSManagedObjectContext *context = [[NSManageObjectContext alloc] init];
[context setPersistentStoreCoordinator:coordinator];
А потом пришло время сохранить, я делаю это:
NSError *error = nil;
BOOL result = [context save:&error];
В документации указано, что последовательность событий будет такой:
- Сохранить магазин A
- Сохранить магазин B
Что, если хранилище A сохраняет правильно, но хранилище B не может сохранить по какой-то причине? (например, файл на диске был удален или разрешения сделали его доступным только для чтения, такого рода вещи). Я не могу найти какую-либо документацию, детализирующую, будут ли Core Data откатывать изменения для сохранения A.
Мне кажется странным, что граф объектов был бы оставлен в несогласованном состоянии (то есть один магазин обновлен, а другой нет), но несколько сложнее и ресурсоемко, чтобы выполнить полностью атомарную экономию в нескольких хранилищах. Хотелось бы получить некоторые пояснения, возможно, от кого-то с большим опытом работы с системой!