![](/img/trans.png)
[英]Swift 4: Save and retrieve an array of custom objects (with nested custom objects) to 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.