iOS 12.1中,unarchiveObject(withFile:)
已被弃用。
如何将NSKeyedUnarchiver.unarchiveObject(withFile:String)
转换为调用NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data:Data)
、NSKeyedUnarchiver.unarchivedObject(ofClasses:[AnyClass],from: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()
}
}
unarchiveObject(withFile:)
的代码? - David Rönnqvist