私は、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]
したがって、これらすべてを実行した後、私のファイル システムと永続ストアは、私が知る限り良好に見えます。1 つ欠けているのは、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];