从UserDefaults中的列表中删除自定义对象

时间:2018-07-10 16:07:32

标签: ios swift

我正在尝试从存储在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删除上面代码中的订单后,我仍然看到所有元素,这意味着我看不到该订单被删除。

3 个答案:

答案 0 :(得分:1)

那是因为您没有保存更改。执行删除操作后,您需要将persistedOrders重新转换为JSON,然后:

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

答案 1 :(得分:0)

您需要使用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)
    }

}

答案 2 :(得分:0)

您必须正确存储UserDefaults

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

现在,您可以使用以下方法将其删除:

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