如何在 iOS 12.0 中的用户默认值中保存对象数组.使用任何数组 [[字符串:任意]]



我想在用户默认值中保存一个对象数组,而不使用Codable。

我尝试在数据中转换数组并保存在用户默认值中:

 let childsArray = result["childs"] as? [[String: Any]]
 let childsData = NSKeyedArchiver.archivedData(withRootObject: childsArray!)
 UserDefaults.standard.set(childsData, forKey: "childsArray")
 UserDefaults.standard.synchronize()

它给了我这个警告:

'archivedData(withRootObject:)'在 中已弃用 iOS 12.0:使用 +archivedDataWithRootObject:requiringSecureCoding:error:代替

如何解决此警告并实现在 UserDefaults 中保存对象数组的预期目标?

您可以使用以下代码存档数组:

do {
    let childsData = try NSKeyedArchiver.archivedData(withRootObject: childsArray!, requiringSecureCoding: true)
    UserDefaults.standard.set(childsData, forKey: "childsArray")
    UserDefaults.standard.synchronize()
} catch {
    print(error)
}

并使用以下代码取消存档对象:

do {
    let childData = UserDefaults.standard.value(forKey: "childsArray")
    if let childArray = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(childData as! Data) {
        print(childArray)
    }
} catch {
    print(error)
}
let object1 = ["key1":"value1"]
let object2 = ["key2":"value2"]
let array = [object1, object2]
UserDefaults.standard.set(array, forKey: "childArray")
UserDefaults.standard.synchronize()
let storedArray = UserDefaults.standard.value(forKey: "childArray") as! [[String:String]]
print(storedArray)

最新更新