Как удалить данные в iCloud

Я работаю над переносом хранилища 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];

person moliveira    schedule 08.08.2013    source источник


Ответы (2)


Папка журнала транзакций будет находиться в том месте, которое вы указали NSPersistentStoreUbiquitousContentURLKey при создании магазина в iCloud, и может находиться за пределами папки «Документы», если вы решили ее разместить именно там.

Войдите на сайт developer.icloud.com и посмотрите, было ли что-то сохранено в этот момент.

Чтобы удалить, см. мой ответ здесь для того, что я использовал в прошлом:

person Rob Glassey    schedule 09.08.2013
comment
Спасибо за ответ. Я добавил обновление выше, которое включает код, который изначально устанавливал контейнер iCloud. К сожалению, когда я загружаю данные приложения с устройства с помощью организатора Xcode и ищу MyAppName.store или данные, он ничего не находит, но данные остаются в iCloud. - person moliveira; 09.08.2013
comment
Я сомневаюсь, что вы увидите материал iCloud, загрузив данные приложения через Xcode Organizer... Папка повсеместности iCloud для вашего приложения хранится в другой части файловой системы. Чтобы получить его, войдите на сайт developer.icloud.com или откройте папку ~/Library/Mobile Documents на компьютере Mac, который зарегистрирован в том же магазине iCloud. URL-адрес, который вы получаете при вызове URLForUbiquityContainerIdentifier:, дает вам корневое расположение папки ubiquity на локальном устройстве — передайте этот URL-адрес методу ведения журнала, который я дал в своем другом ответе, чтобы получить дамп отладки всего в iCloud. - person Rob Glassey; 09.08.2013
comment
Глядя на ваш код выше, ваши файлы журнала будут находиться в папке coreDataUrl, которая должна разрешиться как /data в вашей папке iCloud — она находится на том же уровне, что и /Documents, поэтому вы не можете видеть ее в Документы. Поэтому, чтобы удалить их, передайте coreDataUrl подходящей функции удаления. - person Rob Glassey; 09.08.2013

Я только что обнаружил, что Xcode позволяет сбросить контейнер с помощью меню Xcode:

Debug->iCloud->Delete Container Contents

Также полезно иметь возможность просматривать содержимое в Интернете: https://developer.icloud.com/.

person tomi44g    schedule 07.04.2014