Дублирование хранилища SQLite - PullRequest
1 голос
/ 23 февраля 2012

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

1 Ответ

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

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

NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...