Я пытаюсь реализовать writeSafelyToURL: ofType: forSaveOperation: error: на подклассе NSPersistentDocument. Мне нужно обработать условие NSAutosaveElsewhereOperation, которое эффективно дублирует работу хранилища SQLite.Дублирование SQLite-хранилища
Следующий код имеет проблему, поскольку он создает дублирующее хранилище, но хранилище фактически пустое, и я не могу понять, почему. Я заметил проблему, когда использовал параметр «Восстановить документ», но стало ясно, когда я попытался использовать пункт меню «Дублировать».
В принципе, я пытаюсь удалить текущий магазин, поэтому он не сохраняется. Затем я добавляю хранилище temp, сохраняю контекст, удаляю хранилище temp и добавляю оригинальный магазин обратно.
if (inSaveOperation == NSAutosaveElsewhereOperation) {
NSPersistentStoreCoordinator *coordinator = [[self managedObjectContext] persistentStoreCoordinator];
id tempStore = [coordinator addPersistentStoreWithType:@"SQLite" configuration:nil URL:storeURL options:nil error:outError];
success = (tempStore != nil);
id originalStore = [coordinator persistentStoreForURL:originalStoreURL];
success = success &&
[coordinator removePersistentStore:originalStore error:outError];
success = success &&
[[self managedObjectContext] save:outError];
// restore original store
success = success &&
[coordinator removePersistentStore:tempStore error:outError];
success = success &&
[self configurePersistentStoreCoordinatorForURL:originalStoreURL ofType:inTypeName modelConfiguration:nil storeOptions:nil error:nil];
Мое настоящее понимание NSAutosaveElsewhereOperation не является (только) дублированием. Это происходит после автосохранения, пока документ еще не установлен. Я вижу на данный момент два случая использования, когда это происходит (1) после того, как новый документ еще не сохранен, и (2) после дубликата существующего документа – Stephan