我有一个包含一些 SwiftData 模型的应用程序。其中一个模型名为 Tapas,它与 TapasAsana 有关系。一个 Tapas 包含多个 Asana,因此我通过关系将它们关联起来。到目前为止,一切运行良好。
现在我刚刚忘记了 TapasAsana 中的一个属性。我读过关于轻量级迁移的文章,应该很容易添加该属性。但无论我在属性的末尾还是中间添加它,它都会破坏我的应用程序。应用程序编译并运行,但旧数据不再显示。在应用程序中创建新数据也行不通,尝试直接创建 TapasAsana 会导致应用程序崩溃。
这是 TapasAsana 模型的代码,我正在向其中添加一个属性。新属性称为 recoupCount。
import Foundation
import SwiftData
@Model
class TapasAsana {
var name: String
var duration: Int /// How long to execute daily
var timeToday: Int /// Time done already today
var recoupCount: Int /// How many recoups this Asana has.
var polar: Bool /// If it is a polar Asana
var doneToday: Bool /// If it is completed today
init(name: String = "Padahastasana", duration: Int = 5 * 60, timeToday: Int = 0, recoupCount: Int = 0, polar: Bool = false, doneToday: Bool = false) {
self.name = name
self.duration = duration
self.timeToday = timeToday
self.recoupCount = recoupCount
self.polar = polar
self.doneToday = doneToday
}
}
我尝试只添加新属性,将其添加到最后位置,以免混淆 SwiftData 的顺序。但这些都不起作用。我没有再尝试,因为阅读有关迁移的文章说,简单地添加属性应该可以正常工作。
您需要为新属性赋予一个默认值以使轻量级迁移能够正常工作,并且它必须位于声明的位置,在初始化参数列表中这样做是不够的。