我一直在努力将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数据还需要做些什么?苹果iCloud文档提到删除事务日志但我没有看到我的Documents文件夹中需要清理的任何其他文件。非常感谢任何帮助!
更新:
最初使用以下选项设置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];
答案 0 :(得分:5)
我刚刚发现Xcode允许您使用Xcode菜单重置容器:
Debug->iCloud->Delete Container Contents
能够在线查看内容也很有帮助:https://developer.icloud.com/
答案 1 :(得分:1)
当您在iCloud中创建商店时,事务日志文件夹将位于您设置NSPersistentStoreUbiquitousContentURLKey
的任何位置,而可能位于您的Documents文件夹之外,如果您选择将其放置在
登录developer.icloud.com,查看当时是否存储了任何内容。
要删除,请参阅我的回答here,了解我过去使用过的内容: