需要一些有关如何使用新的1对多关系设置核心数据迁移的信息

时间:2013-12-30 06:22:30

标签: ios core-data core-data-migration

有关核心数据迁移的问题:

原始模型只是具有多个属性的单个实体(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)有关建立此类迁移的最佳方法的任何建议吗?

感谢。

1 个答案:

答案 0 :(得分:0)

你是正确的,轻量级的迁移是行不通的。此外,重度迁移在计算上会非常昂贵,我不会建议它。

我建议采用两步法:

  1. 允许轻量级迁移。这将导致您的TransactionList实体为空。
  2. 迁移后,浏览您的交易并根据需要创建TransactionList个实体。
  3. 与使用大量迁移相比,这将更快,更容易进行测试/调试。您可以使用-[NSManagedObjectModel isConfiguration: compatibleWithStoreMetadata:]方法测试是否需要进行迁移。这将让您知道需要迁移,然后启动迁移并最终进行后期处理。