SwiftData不会持久化数据

ou6hu8tu  于 9个月前  发布在  Swift
关注(0)|答案(1)|浏览(124)

我试图建立一个宏跟踪应用程序,但当我编辑我的数据,它从来没有保存

@main
struct Macro_TrackerApp: App {
    var sharedModelContainer: ModelContainer = {
        let schema = Schema([
            Macros.self,
        ])
        let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)

        do {
            return try ModelContainer(for: schema, configurations: [modelConfiguration])
        } catch {
            fatalError("Could not create ModelContainer: \(error)")
        }
    }()
    var body: some Scene {
        WindowGroup {
            TabBarView()
        }
        .modelContainer(sharedModelContainer)
    }
}
@Model
class Macros: Identifiable {
    @Attribute(.unique) var id: String = UUID().uuidString
    var date: Date
    var fat: CGFloat
    var carbs: CGFloat
    var proteins: CGFloat
    var calories: CGFloat
    
    init(id: String = UUID().uuidString, date: Date, fat: CGFloat, carbs: CGFloat, proteins: CGFloat, calories: CGFloat = 0) {
        self.id = id
        self.date = date
        self.fat = fat
        self.carbs = carbs
        self.proteins = proteins
        self.calories = calories
    }
}
func updateMacros(dailyMacros: Macros) {
        dailyMacros.fat += quickAddFat
        dailyMacros.carbs += quickAddCarbs
        dailyMacros.proteins += quickAddProteins
        dailyMacros.calories += ((quickAddFat * 9) + (quickAddCarbs * 4) + (quickAddProteins * 4))
    }
@Environment(\.modelContext) private var modelContext
@Query var macros: [Macros]
var dailyMacros: Macros? {
    macros.first(where: { Calendar.current.isDate($0.date, equalTo: Date.now, toGranularity: .day) }) ?? nil
}
HStack {
                    CustomButtonView(action: {
                        viewModel.updateMacros(dailyMacros: dailyMacros)
                        print(dailyMacros.carbs)
                        print(macros.first(where: { Calendar.current.isDate($0.date, equalTo: Date.now, toGranularity: .day) })?.carbs)
                    }, label: "Appliquer", color: Color.macroTrackerButton, width: 200, height: 50)
                }

如果我的查询返回一个空数组,我就调用这个函数

func insert() {
        modelContext.insert(Macros(date: Date.now, fat: 0, carbs: 0, proteins: 0))
    }


我不能理解,我只看到todo应用程序教程,所以它并没有真正帮助我谢谢!
我试着手动保存,但没有任何变化,我试图打印我的var数据只是为了知道它是否编辑得很好,是的..所以我不明白为什么每次我杀死应用程序,我所有的对象返回到初始状态,他们没有删除,但我不能编辑他们,它不保存
代码库:https://github.com/Killianoni/Macro-Tracker

k2fxgqgv

k2fxgqgv1#

这与SwiftData无关,UI中所做的所有更改都已正确保存,可以通过重新启动应用程序或激活Core Data的调试日志来验证
您可以通过进入Edit Scheme. -> Run -> Arguments并添加

-com.apple.CoreData.SQLDebug 1

字符串
代码的实际问题在于视图,首先,DiaryView中的视图模型应该声明为@StateObject,因为它属于视图

@StateObject var viewModel = DiaryViewModel()


然后在ProgressCircleView中,我们有相反的问题,属性number1不属于视图,也不被视图更改,所以它不是@State属性,所以将它和其他属性更改为let

let number1: CGFloat
let number2: CGFloat
let color: Color
let size: CGFloat
var title: String?


有了这些变化,你的UI应该会得到正确的更新。

相关问题