我无法将商店实体属性从String迁移到Integer 16.以下是我采取的步骤:
这是错误:
未解决的错误错误域= NSCocoaErrorDomain代码= 134140“ 操作无法完成。 (可可错误134140.)“ UserInfo = 0xbd5cd20 {reason =找不到或自动推断映射 迁移模型,destinationModel = ...
映射模型存在于已编译的.app:
中
并在项目中:
迁移适用于像Integer 16>这样的属性。整数32,或更改属性名称时。
我尝试创建一个简单的核心数据项目,并且从String到Integer 16自动(有和没有映射模型)进行迁移。
最奇怪的部分是我尝试以编程方式查找捆绑中的所有映射模型,但没有找到当前源/目标模型。
答案 0 :(得分:21)
这是因为Core Data无法自动迁移您的属性。这是因为它不能保证字符串总是适合int(即使你知道你的数据也是如此)。
所以你需要做的是使用映射模型。这是如何做到的:
NSEntityMigrationPolicy
)createDestinationInstancesForSourceInstance:entityMapping:manager:error:
,它将为您提供源实例,以便您可以将该字符串转换为int并将其存储在新商店中。您的代码应如下所示:
- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error
{
NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:[mapping destinationEntityName] inManagedObjectContext:[manager destinationContext]];
// Copy all the values from sInstance into newObject, making sure to apply the conversion for the string to int when appropriate. So you should have one of these for each attribute:
[newObject setValue:[sInstance valueForKey:@"xyz"] forKey:@"xyz"];
[manager associateSourceInstance:sInstance withDestinationInstance:newObject forEntityMapping:mapping];
}
请务必更改迁移设置,以便在初始化Core Data
的任何位置删除自动类型推断NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, nil];
那应该是它......
答案 1 :(得分:1)
对于那些经历了数以千计的长矛的人来说,无法找到迁移的映射模型"错误,这可能会有所帮助:
就我而言,app 自动在clean / rebuild = \
之后找到了映射模型