gpt4 book ai didi

swift - Codable API 能否用于解码使用 NSKeyedArchiver.archivedData 编码的数据?

转载 作者:行者123 更新时间:2023-11-30 11:48:35 25 4
gpt4 key购买 nike

我正在将代码库从使用 NSCoding 转换为使用 Codable。我在尝试恢复使用 NSCoding 编码的数据时遇到了问题。我有一个用代码编码的对象:

let encodedUser = NSKeyedArchiver.archivedData(withRootObject: user)
let userDefaults = UserDefaults.standard
userDefaults.set(encodedUser, forKey: userKey)
userDefaults.synchronize()

之前使用以下代码对其进行解码:

if let encodedUser = UserDefaults.standard.data(forKey: userKey) {
if let user = NSKeyedUnarchiver.unarchiveObject(with: encodedUser) as? User {
\\ do stuff
}
}

User对象更新为Codable后,我尝试更新存档/取消存档代码以使用PropertyListDecoder,因为我看到archivedData(withRootObject:) 返回格式为 NSPropertyListBinaryFormat_v1_0 的数据。运行此代码时:

if let encodedUser = UserDefaults.standard.data(forKey: userKey) {
let user = try! PropertyListDecoder().decode(User.self, from: encodedUser)
\\ do stuff
}

对于我正在查找的第一个键,我收到一个 keyNotFound 错误,并且在我的 init(from: Decoder) 中设置断点,我可以看到容器有没有 key 。我还尝试使用 PropertyListSerialization.propertyList(from:options:format) 来查看是否可以将该结果传递给 PropertyListDecoder,但该函数给了我一个 NSCFDictionary ,其结构非常奇怪,但似乎包含我正在查找的所有数据。

如果对象是使用 NSKeyedArchiver.archivedData(withRootObject:) 编码的,是否可以使用 Codable API 对其进行解码?我怎样才能实现这个目标?

最佳答案

我认为答案几乎肯定是否定的,您不能使用 Codable 来解码 NSCoding 编码的内容。我想摆脱代码库中的所有 NSCoding 缺陷,并确定了一个迁移路径,在关键数据模型中实现了两种协议(protocol),以将存储的数据从 NSCoding 转换> 为 Codable 格式,当我的足够多的用户更新后,我将在将来删除 NSCoding。

关于swift - Codable API 能否用于解码使用 NSKeyedArchiver.archivedData 编码的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48554479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com