Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 核心数据存储迁移带来的问题_Iphone_Objective C_Cocoa_Cocoa Touch_Core Data - Fatal编程技术网

Iphone 核心数据存储迁移带来的问题

Iphone 核心数据存储迁移带来的问题,iphone,objective-c,cocoa,cocoa-touch,core-data,Iphone,Objective C,Cocoa,Cocoa Touch,Core Data,我尝试使用NSMigrationManager手动迁移来执行核心数据存储的迁移。我使用默认向导在Xcode(版本4)中创建了一个映射模型,然后在代码中使用 [NSMappingModel mappingModelFromBundles:nil forSourceModel:sourceModel destinationModel:targetModel]; 这似乎很管用。唯一的问题是,在我尝试稍微调整映射模型(使用描述的方法将一个实体拆分为两个)后,前面的方法不再工作,它只返回nil(这意味着

我尝试使用NSMigrationManager手动迁移来执行核心数据存储的迁移。我使用默认向导在Xcode(版本4)中创建了一个映射模型,然后在代码中使用

[NSMappingModel mappingModelFromBundles:nil forSourceModel:sourceModel destinationModel:targetModel];
这似乎很管用。唯一的问题是,在我尝试稍微调整映射模型(使用描述的方法将一个实体拆分为两个)后,前面的方法不再工作,它只返回nil(这意味着映射模型不再与源和目标模型兼容?!)。另外,有趣的是,Xcode向我显示了下拉列表,其中包含映射模型的源模型和目标模型,这些模型没有更改,并且设置为正确的模型

兼容性检查是如何工作的?映射模型是否确实存在一些更改,这些更改会使其与源/目标模型的原始组合不兼容


更新:从模拟器卸载应用程序并恢复sqlite数据库后,它再次工作,在我看来,有些模型没有正确更新。。奇怪的是,我现在想知道这是在真正的更新过程中发生的,还是仅仅是Xcode/模拟器的问题。

每次使用映射模型进行迁移时,它都会改变持久存储。每次都必须从相同版本的存储开始,并以完全相同的顺序执行迁移以获得相同的结果


我通常会建议定期删除和重新创建开发中使用的存储。通常我在每次测试运行开始时都这样做,即使数据集相当大。如果不这样做,那么就有可能通过在开发代码中所做的更改在存储中建立“kruft”

澄清:您是否迁移了模型一次,然后又尝试再次迁移?你两次都使用同一个映射模型吗?@TechZen:是同一个模型,我后来还原了sqlite文件。映射模型在物理上是相同的,但对其进行了一些更改(属性映射已调整等)