在 UserDefaults 中保存项目数组 - iOS 12
Posted
技术标签:
【中文标题】在 UserDefaults 中保存项目数组 - iOS 12【英文标题】:Save array of items in UserDefaults - iOS 12 【发布时间】:2018-06-28 21:42:31 【问题描述】:我想在 UserDefaults 中保存一组 TreeWithPos
对象。我发现的每个解决方案(如 Data 对象)在 ios 12 中都不起作用。
我能做些什么?
我试过这个:
try? defaults.set(NSKeyedArchiver.archivedData(withRootObject: treesArr, requiringSecureCoding: false), forKey: "trees")
【问题讨论】:
分享你的尝试 让您的对象实现Codable
并将其编码为JSON 字符串然后存储在UserDefaults
中可能更容易
您需要显示更多代码;特别是treesArr
中的对象的定义@
不要将您的数据存储在 UserDefaults 中。不要打扰NSKeyedArchiver
。使用 Swift 序列化并将数据写入文件。
【参考方案1】:
您可以尝试将Codable
协议与JSONEncoder()
和JSONDecoder()
一起使用
struct SaveItem : Codable
var name:String
//
let arr = [SaveItem(name: "name1"),SaveItem(name: "name2")]
do
// write
var data = try JSONEncoder().encode(arr)
UserDefaults.standard.set(data, forKey: "Key")
// read
let content = UserDefaults.standard.data(forKey: "Key")
let saved = try JSONDecoder().decode([SaveItem].self, from: content!)
print(saved)
catch
print(error)
【讨论】:
我得到一个错误:“类型'TreeWithPos'不符合协议'Decodable'” 将其转换为 struct TreeWithPos : Codable 您是否有 Type NSNumber 、 Any 或任何其他不符合 Codable 的自定义类型结构??以上是关于在 UserDefaults 中保存项目数组 - iOS 12的主要内容,如果未能解决你的问题,请参考以下文章