簡體   English   中英

從UserDefaults中的列表中刪除自定義對象

[英]Removing Custom Objects from List in UserDefaults

我試圖從存儲在NSUserDefaults中的列表中刪除一個元素。 getAll函數在下面實現:

  func getAllOrders() -> [Order] {

        var orders = [Order]()

        if let userDefaults = UserDefaults(suiteName: "group.com.johndoe.SoupChef.Shared") {

            if let ordersData = userDefaults.data(forKey: "Orders") {
                orders = try! JSONDecoder().decode([Order].self, from: ordersData)
            }
        }

        return orders
    }

這是刪除訂單的代碼。

func delete(order :Order) {

        var persistedOrders = getAllOrders()

        persistedOrders.removeAll { persistedOrder in
            persistedOrder.identifier.uuidString == order.identifier.uuidString
        }

    }

當我調用getAllOrders刪除上面代碼中的訂單后,我仍然看到所有元素,這意味着我看不到該訂單被刪除。

那是因為您沒有保存更改。 執行刪除后,您需要將persistedOrders回JSON,然后:

userDefaults.set(json, forKey:"Orders")

您需要使用jsonEncoder並對已編輯的數組進行編碼,然后將其存儲為用戶默認設置

func delete(order :Order) {

    var persistedOrders = getAllOrders()

    persistedOrders.removeAll { persistedOrder in
        persistedOrder.identifier.uuidString == order.identifier.uuidString
    }
    do {

        let data = try JSONEncoder().encode(persistedOrders)
        userDefaults.set(data, forKey:"Orders")
    }
    catch {

        print(error)
    }

}

您必須正確存儲您的UserDefaults

UserDefaults.standard.set(json, forKey:"Orders")

現在,您可以使用以下方法刪除它們:

UserDefaults.standard.removeObject(forKey: "Orders")

暫無
暫無

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

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