【发布时间】:2019-04-05 10:33:59
【问题描述】:
在 iOS 12.1 中,unarchiveObject(withFile:) 已被弃用。
如何将NSKeyedUnarchiver.unarchiveObject(withFile: String) 转换为使用对NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data: Data) 或NSKeyedUnarchiver.unarchivedObject(ofClasses: [AnyClass] 的调用,来自:Data) 或NSKeyedUnarchiver.unarchivedObject(ofClass: NSCoding.Protocol, from: Data)?
我猜你必须有类似let fileData = try Data(contentsOf: URL) 的东西,然后使用其中一种方法来取消归档数据。但是,我无法弄清楚,并且折旧随附的文档没有帮助(至少对我而言)。
存档的数据相当简单——只是一个字符串数组(此代码定义的类NameToBeSaved的数组):
class NameToBeSaved: NSObject, NSCoding {
var name: String
init(userEnteredName: String) {
self.name = userEnteredName
super.init()
}
func encode(with aCoder: NSCoder) {
aCoder.encode(name, forKey: "name")
}
required init?(coder aDecoder: NSCoder) {
name = aDecoder.decodeObject(forKey: "name") as! String
super.init()
}
这里是调用 unarchiveObject(withFile:) 的代码 -
init() {
if let archivedCategoryNames = NSKeyedUnarchiver.unarchiveObject(withFile: categoryNameArchiveURL.path) as? [NameToBeSaved] {
allCategories += archivedCategoryNames
} else {
for category in starterCategories {
let thisNewCategory = NameToBeSaved(userEnteredName: category)
createNewCategory(thisNewCategory)
}
sortCategories()
}
}
【问题讨论】:
-
这不是一个答案:但Data You Can Trust WWDC 2018 session 谈论新的 API 以及它们与旧的和现已弃用的 API 的区别。
-
您问题中的代码是对单个键进行编码或解码。您能否也显示您当前调用
unarchiveObject(withFile:)的代码? -
@DavidRönnqvist 我已更新帖子以包含调用 unarchiveObject(withFile:) 的代码。我也会看看你提供的链接。感谢您的帮助。
标签: ios swift nskeyedarchiver