未调用createDestinationInstancesForSourceInstance

时间:2014-05-27 18:12:06

标签: core-data nsmanagedobject core-data-migration

我正在尝试为CoreData条目执行自定义迁移。我需要更改属性的名称和类型。

所以我添加了新的datamodel和mappingmodel。例如,我在旧模型中有myData(String),我在新模型中需要CarDate(Date)。 我添加了行:CarDate => $ source.myData到* .xcmappingmodel文件并创建了类:

@implementation RemindersMigration

- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance
                                  entityMapping:(NSEntityMapping *)mapping
                                        manager:(NSMigrationManager *)manager
                                          error:(NSError **)error {

NSManagedObject *newObject =
[NSEntityDescription insertNewObjectForEntityForName:[mapping destinationEntityName]
                              inManagedObjectContext:[manager destinationContext]];

NSString *dateString = [sInstance valueForKey:@"myData"];

NSDateFormatter *formatter = ...;

NSDate *date = [formatter dateFromString:dateString];

[newObject setValue:date forKey:@"CarDate"];

[manager associateSourceInstance:sInstance withDestinationInstance:newObject forEntityMapping:mapping];

return YES;

}

我用模拟器测试了迁移,所以我用Git切换到旧版本,添加了新条目,切换到了新版本。在CarDate我没有。 请指出我错在哪里?

1 个答案:

答案 0 :(得分:2)

在Mapping Model Editor中,选择Entity Mapping,打开Utilities窗格(右侧),然后选择Mapping Model Inspector(alt + command + 3)。

在自定义策略字段中输入您的NSEntityMigrationPolicy子类的名称(在您的案例中为RemindersMigration)。

enter image description here