Tenho um aplicativo com alguns modelos SwiftData. Um se chama Tapas e tem um relacionamento com TapasAsana. Um Tapas tem muitos Asanas, então eu os conectei com um relacionamento. Tudo isso funciona maravilhosamente bem até agora.
Agora eu esqueci uma propriedade no TapasAsana. Eu li sobre migração leve e deveria ser fácil adicionar essa propriedade. Mas não importa se eu adiciono no final ou no meio das propriedades, isso quebra meu aplicativo. O aplicativo compila e executa, mas os dados antigos não são mais exibidos. E criar novos no aplicativo também não funciona, tentar criar um TapasAsana diretamente trava o aplicativo.
Este é o código para o Modelo TapasAsana, aquele em que estou adicionando uma propriedade. A nova propriedade é chamada 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
}
}
Tentei apenas adicionar a nova Propriedade, para adicioná-la na última posição para não confundir SwiftData com a ordem. Mas nada disso funciona. Não tentei mais porque ler sobre migração disse que a simples adição de uma propriedade deveria funcionar bem.
Você precisa dar à sua nova propriedade um valor padrão para que uma migração leve funcione e ele deve estar onde foi declarado. Fazer isso na lista de parâmetros init não é suficiente.