我一直在努力将 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 store迁移到了应用沙箱中的新位置,但是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];