我知道轻量级迁移可以处理这些事情:
- 添加或删除实体、属性或关系
- 使用默认值使属性非可选
- 使非可选属性可选
但是,我们是否需要轻量级迁移来更改验证规则?
以及如何处理我们定义如下内容的情况:
属性为整数,其最小值为 0,最大值为 100。并且有一些从 0 到 100 的值添加到持久存储中。然后,我们更改将此属性的最小值设置为 20 和最大值设置为 50 的规则。
Core Data 将如何应对此更改,因为现在会有一些数据具有无效值?如果需要,如何处理?
首先,不,如果您只想包含新的验证规则,则无需更新核心数据模型版本并使用轻量级迁移。更改验证规则不会更改模型,因此它会正常打开。
对于不符合验证的旧数据,一开始应该什么都不发生。核心数据不会触及不需要更改的记录。验证通常在save
操作期间触发。
这意味着下次保存时,您将收到验证错误。一种解决方案是在更改验证规则后,在对数据进行任何其他更改之前save
在应用启动时循环访问所有受影响的数据。
如果这不可行(例如,由于数据量非常大),则必须进行自定义迁移,并通过您设置的迁移规则相应地修改所有无效数据。