簡體   English   中英

嘗試在 UserDefaults 中保存數據並在列表視圖中顯示它們

[英]Trying to save data in UserDefaults and show them in list view

試圖在 UserDefaults 中保存一些數據,但我在視圖中得到了 nil。 我不知道問題出在哪里

這是我在 ContentView 中的代碼:

var saveButton: some View {
    Button("Save Meal") {
        let meal = Meal(name: self.mealGenerator.currentMeal!.name,
                        imageUrlString: self.mealGenerator.currentMeal!.imageUrlString,
                        ingredients: self.mealGenerator.currentMeal!.ingredients,
                        instructions: self.mealGenerator.currentMeal!.instructions,
                        area: self.mealGenerator.currentMeal!.area,
                        category: self.mealGenerator.currentMeal!.category)
        self.savedMeals.meals.append(meal)
        self.savedMeals.saveMeals()
    }

這是我要保存的課程:

class SavedMeals: ObservableObject {
    @Published var meals: [Meal]

    func saveMeals() {
        if let encoded = try? JSONEncoder().encode(meals) {
            UserDefaults.standard.set(encoded, forKey: "Meals")
        }
     }
    
     init() {
        if let meals = UserDefaults.standard.data(forKey: "Meals") {
            if let decoded = try? JSONDecoder().decode([Meal].self, from: meals) {
                self.meals = decoded
                return
            }
        }
        self.meals = []
    }
}

我試圖在視圖中列出:

struct SavedMealsView: View {

    @ObservedObject var savedMeals: SavedMeals

    var body: some View {
        NavigationView {
            List(savedMeals.meals) { meal in
                Text(meal.name)
            }
            .navigationBarTitle("Saved Meals", displayMode: .inline)
        }
    }
}

不管你解碼什么,你都會在初始化結束時meals = [] 也許這會更好:

init() {
    if data = UserDefaults.standard.data(forKey: "Meals") {
        do {
            meals = try JSONDecoder().decode([Meal].self, from: meals)
        } catch {
            assertionFailure("Oops!")
            meals = [] 
        }
    } else {
        meals = []
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM