Я работаю над переносом хранилища iCloud в локальное хранилище в песочнице приложения. Код выглядит так (для ясности код обработки ошибок удален):
NSPersistentStore *iCloudStore = [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:legacyStoreUrl options:options error:&error];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *targetStoreUrl = [self localStorageUrl];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
[_persistentStoreCoordinator migratePersistentStore:legacyStore toURL:targetStoreUrl options:options withType:NSSQLiteStoreType error:nil];
На данный момент мы успешно перенесли хранилище iCloud в новое место в песочнице приложения, но в iCloud все еще есть данные и старый файл sqlite на месте... следующая строка удаляет файл sqlite
[fileManager removeItemAtURL:legacyStoreUrl error:nil]
Итак, после запуска всего этого моя файловая система и постоянные хранилища, насколько я могу судить, выглядят хорошо. Один недостающий бит заключается в том, что данные, хранящиеся в iCloud, не удаляются из iCloud (хотя приложение больше не получает к ним доступ). Что еще нужно сделать, чтобы программно удалить данные iCloud? В документах Apple iCloud упоминается удаление журналов транзакций, но я не вижу никаких других файлов в папке «Документы», которые нужно очистить. Любая помощь высоко ценится!
Обновлять:
Магазин iCloud изначально был настроен с использованием следующих параметров:
NSURL *ubiquityContainerUrl = [fileManager URLForUbiquityContainerIdentifier:nil];
NSString* coreDataCloudContent = [[ubiquityContainerUrl path] stringByAppendingPathComponent:@"data"];
NSURL *coreDataUrl = [NSURL fileURLWithPath:coreDataCloudContent];
options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
@"MyAppName.store", NSPersistentStoreUbiquitousContentNameKey,
coreDataUrl, NSPersistentStoreUbiquitousContentURLKey,
nil];