2012-02-23 1 views
1

Я пытаюсь реализовать 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]; 
+0

Мое настоящее понимание NSAutosaveElsewhereOperation не является (только) дублированием. Это происходит после автосохранения, пока документ еще не установлен. Я вижу на данный момент два случая использования, когда это происходит (1) после того, как новый документ еще не сохранен, и (2) после дубликата существующего документа – Stephan

ответ

0

потому что вы пытаетесь найти хранилище в папке «Приложение», которая, случается, является только для чтения. Я думаю, вы должны переключить папку Documents.

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
+0

Это определенно не папка приложения. У меня есть код NSLog, который печатает что-то вроде/private/var/folders/4z/7bzwcw5915g29x1363xhhfm40000gp/T/TemporaryItems inSaveOperation запускается с помощью AutoSave, поэтому я не выбираю его. –

Смежные вопросы