はい、私もこの質問があります。
iCloud ストアをローカル ストアに変更したいと考えています。
解決策 1 : managedObjects を 1 つずつ localStore に移動します。
ただし、データベースが大きい場合は、非常に遅くなります。
それで、昨日2番目の解決策を見つけました。
解決策 2: iCloud ストアのメタデータを編集する
新しい場所に保存します。
メタデータの「com.apple.coredata.ubiquity.*」キーを削除すると、完全にローカルなストアが得られます。
ソリューション2のコードは次のとおりです。
すでに設定されているいくつかのプロパティがあります。
@property (nonatomic, strong) NSPersistentStoreCoordinator *coordinator;
@property (nonatomic, strong) NSManagedObjectContext *context;
@property (nonatomic, strong) NSPersistentStore *iCloudStore;
//represent the iCloud store already using
//(after [coordinator addPersistentStore] you get this NSPersistentStore)
@property (nonatomic, strong) NSURL *iCloudStoreURL;
//represent the iCloud store real location
//(it is the URL you send to the [coordinator addPersistentStore])
@property (nonatomic, strong) NSURL *iCloudStoreLocalVersionURL;
//represent the location of local version store you want to save
そして移行方法:
-(void)migrateCloudStoreToLocalVersion
{
if(!self.iCloudStore)
return;
// remove previous local version
[FILE_MANAGER removeItemAtURL:self.iCloudStoreLocalVersionURL
error:nil];
// made a copy from original location to the new location
[FILE_MANAGER copyItemAtURL:self.iCloudStoreURL
toURL:self.iCloudStoreLocalVersionURL
error:nil];
//prepare meta data
NSDictionary *iCloudMetadata = [self.coordinator metadataForPersistentStore:self.iCloudStore].copy;
NSMutableDictionary *localVersionMetadata = iCloudMetadata.mutableCopy;
for(NSString * key in iCloudMetadata){
if([key hasPrefix:@"com.apple.coredata.ubiquity"]){
[localVersionMetadata removeObjectForKey:key];
}
}
//modify iCloud store
[self.coordinator setMetadata:localVersionMetadata forPersistentStore:self.iCloudStore];
[self.coordinator setURL:self.iCloudStoreLocalVersionURL forPersistentStore:self.iCloudStore];
//save to the localVersion location
[self.context save:nil];
//restore iCloud store
[self.coordinator setMetadata:iCloudMetadata forPersistentStore:self.iCloudStore];
[self.coordinator setURL:self.iCloudStoreURL forPersistentStore:self.iCloudStore];
}
iCloudStoreLocalVersionURL
次に、ローカル バージョン ストアを使用することができます。
エラーなしで、このローカル バージョン ストアをローカル ストアとして使用できます。
ノート:
メタNSStoreUUIDKey
データの
必要に応じて、新しいストアに置き換えることができます。
マイクに:
問題は:
iCloudストアを追加する際に完全なiCloudオプションを使用すると、すべてが正しくなりますが、iCloudストアのままです. ここでは、iCloud ストアをローカル ストアに変更します。
iCloud オプション以外のオプションを追加すると、エラーが発生し、このストアに変更を保存できません。
したがって、あなたの答えはこの問題に対するものではありません。