我在启用CoreData的应用程序中尝试使用iCloud Sync。到目前为止一切正常但现在我想在设置和切换中添加iCloud On / Off Toggle将我的持久存储从iCloud迁移到Local,反之亦然,这样用户就不会丢失他的数据。
当我第一次设置CoreData Persistent时,我询问用户是否要使用iCloud,如果他回答是,我使用以下设置persistentStore
:
[self.managedObjectContext.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:self.storeURL
options:@{ NSPersistentStoreUbiquitousContentNameKey : @"iCloudStore" }
error:&error];
如果他回答否我将只传递nil
作为选项参数。
当用户切换迁移时(在此示例中,从iCloud到本地),我执行迁移,如下所示:
//Migrate
__weak NSPersistentStoreCoordinator *psc = self.managedObjectContext.persistentStoreCoordinator;
NSError *error;
NSPersistentStore *currentStore = [[psc persistentStores] firstObject];
[psc migratePersistentStore:currentStore <------------------ this fails
toURL:self.storeURL
options:@{ NSPersistentStoreRemoveUbiquitousMetadataOption : @YES }
withType:NSSQLiteStoreType
error:&error];
if(error){
NSLog(@"migrateType:%@ migrateError:%@ userInfo:%@",migrateType,migrateError,[migrateError userInfo]);
return;
}
self.useCloud = NO;
//Reloading the Store afterwards....
根据&#34; This&#34;和&#34; This&#34;。 我应该可以使用相同的&#34; storeURL&#34;对于云和本地存储,但不幸的是迁移失败并出现错误:
migrateType:toLocal migrateError:Error Domain=NSCocoaErrorDomain Code=134080 "The operation couldn’t be completed. (Cocoa error 134080.)" UserInfo=0x12a1f0a0 {NSUnderlyingException=Can't add the same store twice} userInfo:{
NSUnderlyingException = "Can't add the same store twice";
我知道我应该能够使用不同的本地和云URL来解决这个问题,但是因为这会使事情变得复杂,所以我宁愿一直使用相同的URL。
任何想法如何解决这个问题?
先谢谢
P.S .: 商店网址方式:
- (NSURL*)storeURL{
NSURL* documentsDirectory = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:NULL];
return [documentsDirectory URLByAppendingPathComponent:@"nameIsNotImportant.sqlite"];
}
ps.s.s:其iOS7