我感觉应该是一个简单的问题,但找不到简单的答案。
我有一个简单的迁移,我只需要添加一个综合属性,以便在Fetched Results Controller中使用。这个新属性只是一个从另一个属性派生的BOOL(用于排序)。
示例:
var title: String? // "engineer" | "accountant"
var hasTitle: Bool // title != nil
简单地说,我需要添加新字段hasTitle
(这似乎是微不足道的),并填充一次。我希望将此代码保留在我的常规应用逻辑之外,因此我不必在所有架构更改的历史记录中进行编码。
是否可以执行轻量级迁移,然后进行隔离的一次性批量更新,或者我是否必须执行自定义/重量级迁移。
其次,如果我需要进行自定义迁移,是否有任何缓解技术 - 我可以使用值表达式"功能"做初始化上面(标题!=无)
我想避免的是必须为迁移设置NSUserDefaults标志,并在每次启动时检查它。我想包含迁移到迁移特定代码的复杂性,而不是污染常规应用程序逻辑。
谢谢!
答案 0 :(得分:1)
是否可以执行轻量级迁移,然后进行隔离的一次性批量更新,或者我是否必须执行自定义/重量级迁移。
两者都有可能。我会选择自定义迁移,因为它可以帮助您避免每次应用启动时都需要检查新属性的代码。对于像您这样的简单更改,它非常简单,尽管对于大多数iOS开发人员来说这是一个未知的领域。我在另一个答案中recently described the process in detail。
如果您没有使用自定义迁移,则需要将新属性设置为可选,然后添加一些自定义代码以检查值是否存在,如果不存在则分配一个。这可能看起来更简单,但这只是因为它似乎更熟悉。核心数据将使您无需在应用启动过程中插入此类检查,并确保转换代码仅在实际需要转换时运行。