В iOS 12.1 unarchiveObject(withFile:)
устарело.
Как преобразовать NSKeyedUnarchiver.unarchiveObject(withFile: String)
для использования вызова в NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data: Data)
, или NSKeyedUnarchiver.unarchivedObject(ofClasses: [AnyClass]
, из: данных), или 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()
}
}