更改 Core Data 中的验证规则时是否需要轻量级迁移

Is lightweight migration needed when changing validation rules in Core Data

我知道轻量级迁移可以处理这些事情:

但是我们是否需要轻量级迁移来更改验证规则?

以及如何处理我们这样定义的情况:

属性为整数,最小值为0,最大值为100。并且有一些从0到100的值被添加到持久存储中。然后我们更改规则,将该属性的最小值设置为 20,最大值设置为 50。

Core Data 将如何应对这一变化,因为现在会有一些数据具有无效值?如果需要如何处理?

首先,不,如果您只想包含新的验证规则,您需要 而不是 核心数据模型版本并使用轻量级迁移。更改验证规则不会更改模型,因此可以正常打开。

对于不符合校验的旧数据,一开始应该什么都不会。 Core Data 不会触及不需要更改的记录。验证通常在 save 操作期间触发。

这意味着下次保存时得到一个验证错误。一种解决方案是在更改验证规则后在应用程序启动时迭代所有受影响的数据,并在对数据进行任何其他更改之前 save

如果这不可行(例如,由于数据量非常大),您将不得不进行自定义迁移,并通过您设置的迁移规则相应地修改所有无效数据。