【问题标题】:Adding attribute with incremented value in coredata when migrating object model迁移对象模型时在核心数据中添加具有增量值的属性
【发布时间】:2013-04-18 22:24:28
【问题描述】:

我正在开发的 iphone 应用程序中有一个由 coredata 管理的 Bet 对象。

我想为这个赌注对象添加一个 UID (betnum) 属性,以便将来我可以使用这个 UID 将赌注推送到服务器,以了解它是否已经存在于服务器上。我知道这将涉及我更新 iPhone 应用程序的版本,将此属性添加到 Bet 类并将此属性设置为已由先前版本的核心数据管理的所有 Bet 对象的递增值(以及任何新的)。

为此,我需要使用Lightweight Migration 或创建我自己的Mapping Model 来迁移对象模型。我已经读过我应该尽可能使用轻量级迁移,因为创建自己的映射模型会变得混乱。我知道可以使用轻量级迁移将属性添加到现有对象,但我不知道如何通过自动递增或类似的方式设置特定值。

我可以为此使用轻量级迁移吗?我是否使用轻量级迁移,然后使用某种后迁移挂钩或 onAppUpdate 方法在迁移后设置代码中的值?还是我注定要创建自己的映射模型?

【问题讨论】:

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


    【解决方案1】:

    不,您不能为此使用轻量级迁移,或者至少在事后没有一些额外的工作。如果您只是添加一个属性,那么轻量级迁移会起作用,但它不包括为新属性设置值。您可以 (a) 使用其他迁移方案之一并在迁移期间添加您的 UID 值,或者 (b) 使用轻量级迁移但添加一个后处理步骤,您可以在其中运行数据存储并设置新值。

    另外,请记住,Core Data 没有自动递增值。您必须计算出每个实例所需的值。

    【讨论】:

    • 鉴于我所读到的关于编写自己的映射模型的内容,b) 听起来是最好的选择。请您指出一些描述如何添加此后处理步骤的文档的方向吗?
    • 这将是非常通用的,我无法想象有人专门记录了它。获取需要 UID 的每个对象,设置每个对象的 UID 值,并保存更改。
    • 我更多地指的是在什么时候,但我想在启动“PersistentStoreCoordinator”后在“persistentStoreCoordinator”中我应该尝试获取“managedObjectModel”并检查它是否需要在那里添加值,看看是否value 是 nil,除非你有更好的建议?
    • 这听起来很对。添加持久化存储后尽快运行检查。
    猜你喜欢
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多