我正在尝试为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)。