Я выполняю миграцию своего хранилища CoreData, где заменяю строковый атрибут атрибутом BOOL: когда строка была «0», логическое значение должно быть «ДА», а во всех остальных случаях логическое значение должно быть «НЕТ». . Звучит достаточно просто, но я думаю, что мне все еще нужно добавить модель сопоставления. Я добавил это в Xcode и реализовал createDestinationInstancesForSourceInstance
:
- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping: (NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error
{
NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:[mapping destinationEntityName] inManagedObjectContext:[manager destinationContext]];
NSString *oldValue = [sInstance valueForKey: @"oldString"];
NSNumber *newValue = @(NO);
if ([oldValue integerValue] == 0)
newValue = @(YES);
[newObject setValue: newValue forKey: @"newBool"];
[manager associateSourceInstance:sInstance withDestinationInstance:newObject forEntityMapping:mapping];
return YES;
}
Однако это никогда не вызывается.
Поскольку я использую MagicalRecord, я также использую:
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed: @"storename.sqlite"];
Я читал, что мне также нужно использовать: NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption: @(YES), NSInferMappingModelAutomaticallyOption: @(NO)};
при запуске моего магазина, но как мне использовать это с MagicalRecord?
ОБНОВЛЕНИЕ: MR использует MR_autoMigrationOptions
для установки параметров миграции. Есть ли способ изменить их для поддержки ручной миграции?