无法从 iCloud 迁移永久存储
Posted
技术标签:
【中文标题】无法从 iCloud 迁移永久存储【英文标题】:Not Able to Migrate Persistent Store Away from iCloud 【发布时间】:2015-11-16 01:50:27 【问题描述】:我正在尝试从我的应用程序中的 NSPersistentStore
中删除 iCloud
同步功能。迁移不会返回任何错误,但是,启用 iCloud 的持久存储中的数据会在迁移后消失。
以下是我的相关代码:
-(void)setUpCoreDataStackWithICloud
//Set up the model and context.
self.model = [NSManagedObjectModel mergedModelFromBundles:nil];
self.context = [[NSManagedObjectContext alloc]init];
[self.context setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
if ([self isiCloudEnabledOnThisDevice]==YES)
[self setUpiCloud];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:[NSNumber numberWithBool:YES] forKey:@"lastLaunchOfAppiCloudWasEnabled"];
else self.psc = [self persistentStoreCoordinatorForUserWithoutiCloudEnabled];
[self.context setPersistentStoreCoordinator:self.psc];
-(NSPersistentStoreCoordinator*)persistentStoreCoordinatorForUserThatAlreadyMigratedToiCloud
NSLog(@"persistentStoreCoordinatorForUserThatAlreadyMigratedToiCloud called");
NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:self.model];
NSError *error = nil;
NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:[self newStoreURL]
options:[self iCloudStoreOptions]
error:&error];
if (!store)
NSLog(@"failed to add store with error %@", [error localizedDescription]);
else NSLog(@"successfully added store for user that has already migrated to iCloud");
NSDictionary *migrateOptions = @ NSPersistentStoreRemoveUbiquitousMetadataOption : @YES,
NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES;
NSError *migrationError = nil;
NSPersistentStore *migratedStore = [psc migratePersistentStore:store toURL:[self testNewestStoreURL] options:migrateOptions withType:NSSQLiteStoreType error:&migrationError];
if (migrationError)
NSLog(@"Migration from iCloud enabled persistent store was unsuccessful. %@", migrationError.localizedDescription);
else NSLog(@"The migration from the iCloud enabled persistent store was successful");
NSLog(@"The migrated store is %@", migratedStore);
return psc;
-(NSURL*)testNewestStoreURL
NSString *path = [self itemArchivePathWithAppendedString:@"test.data"];
NSURL *storeURL = [NSURL fileURLWithPath:path];
return storeURL;
-(NSURL*)newStoreURL
NSString *path = [self itemArchivePathWithAppendedString:@"cloudstore.data"];
NSURL *storeURL = [NSURL fileURLWithPath:path];
return storeURL;
【问题讨论】:
【参考方案1】:它不起作用的原因是因为我也在使用映射模型进行架构迁移。根据文档,iCloud 不支持此功能。即使我试图摆脱 iCloud,当涉及到架构迁移时,它也不允许访问数据。
【讨论】:
以上是关于无法从 iCloud 迁移永久存储的主要内容,如果未能解决你的问题,请参考以下文章
将 PersistentStoreCoordinator 从本地迁移到 iCloud 时数据重复