Невозможно перенести постоянный магазин из iCloud
Я пытаюсь удалить iCloud
возможность синхронизации от NSPersistentStore
в моем приложении. Миграция не возвращает никаких ошибок, однако данные из постоянного хранилища с поддержкой 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, он не разрешает доступ к данным, когда происходит миграция схемы.