有关核心数据迁移的问题:
原始模型只是具有多个属性的单个实体(Transaction)。该应用程序可以存储N个交易,并将其显示在表格中。
原始核心数据模型(简化):
Transaction:
property_x
property_y
property_z
模型现在已经更改,以便新的顶级实体是一个TransactionsList实体,具有1对多的关系,因此每个TransactionsList都有多个事务。
新核心数据模型(简化):
TransactionsList:
property_a
property_b
transactions <-->> Transaction:
property_x
property_y
property_z
<- transactionList
现在已经更改了模型,以便顶级实体是一个TransactionsList实体,具有1对多关系(事务),因此每个TransactionsList都有多个事务。
我在查找如何设置从原始配置迁移到此新配置的任何示例(在Apple文档或Web上)时遇到问题。
轻量级迁移似乎不起作用(因为此更改涉及添加新关系)。
我设置了一个映射文件,并尝试创建自定义迁移策略,但是如果我在其中的任何函数上设置断点,它们永远不会被命中。
我打开了迁移调试,它表明迁移成功了:
“自动架构迁移成功存储在”...“
但是,如果我查看sqlite数据库的内部,则没有TransactionList实体的数据库条目,并且Transactions中的所有transactionList字段(应该链接到拥有的TransactionsList)都为空。
两个问题......
1)关于为什么我的自定义实体迁移策略可能不会被调用的任何线索
2)有关建立此类迁移的最佳方法的任何建议吗?
感谢。
答案 0 :(得分:0)
你是正确的,轻量级的迁移是行不通的。此外,重度迁移在计算上会非常昂贵,我不会建议它。
我建议采用两步法:
TransactionList
实体为空。 TransactionList
个实体。与使用大量迁移相比,这将更快,更容易进行测试/调试。您可以使用-[NSManagedObjectModel isConfiguration: compatibleWithStoreMetadata:]
方法测试是否需要进行迁移。这将让您知道需要迁移,然后启动迁移并最终进行后期处理。