Я пытаюсь реализовать writeSafelyToURL: ofType: forSaveOperation: error: на подклассе NSPersistentDocument. Я должен обработать условие NSAutosaveElsewhereOperation, которое фактически является дублирующей операцией хранилища SQLite.
Следующий код имеет проблему, поскольку он создает дублирующее хранилище, но хранилище фактически пусто, и я не могу понять, почему. Я заметил проблему, когда использовал опцию «Вернуть документ», но она стала ясной, когда я попытался использовать пункт меню «Дублировать».
Обычно я пытаюсь удалить текущее хранилище, чтобы оно не сохранялось. Затем я добавляю временное хранилище, сохраняю контекст, удаляю временное хранилище и добавляю исходное хранилище обратно.
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];