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

因此,我添加了新的数据模型和映射模型。例如,我在旧模型中有myData(String),在新模型中需要CarDate(Date)。
我在* .xcmappingmodel文件中添加了行:CarDate => $ source.myData并创建了类:

@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中,我为零。
请指出我哪里错了?

最佳答案

在“映射模型编辑器”中,选择“实体映射”,打开“实用程序” Pane (右侧),然后选择“映射模型检查器”(alt + command + 3)。

在“自定义策略”字段中输入NSEntityMigrationPolicy子类的名称(在您的情况下为RemindersMigration)。

core-data - 未调用createDestinationInstancesForSourceInstance-LMLPHP

08-26 17:30