无法将数据从 NSKeyedUnarchiver 转换为对象
Can't cast Data from NSKeyedUnarchiver to Object
我通过NSKeyedArchiver将对象存档到数据并成功保存到磁盘,但是当我从NSKeyedUnarchiver获取数据时,我无法将其转换为类型对象。我尝试了很多方法,但 none 成功了。我希望你能帮我解决这个问题。这是我的代码:
class 人:
class Person: NSObject, NSCoding {
func encode(with coder: NSCoder) {
coder.encode(firstName, forKey: "fisrtName")
coder.encode(lastName, forKey: "lastName")
coder.encode(age, forKey: "age")
}
required convenience init?(coder: NSCoder) {
guard let firstName = coder.decodeObject(forKey: "firstName") as? String,
let lastName = coder.decodeObject(forKey: "lastName") as? String else {
return nil
}
let age = coder.decodeInteger(forKey: "age")
self.init(firstname: firstName, lastName: lastName, age: age)
}
let firstName: String
let lastName: String
let age: Int
init(firstname: String, lastName: String, age: Int) {
self.firstName = firstname
self.lastName = lastName
self.age = age
}
}
将数据保存到磁盘:
let tuan = Person(firstname: "Tuan", lastName: "Hoang", age: 21)
let directoryPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let path = directoryPath.first!.appendingPathComponent("PersonData")
let savePath = path.appendingPathComponent("data.plist")
do {
try FileManager.default.createDirectory(at: path, withIntermediateDirectories: true, attributes: nil)
let data = try! NSKeyedArchiver.archivedData(withRootObject: tuan, requiringSecureCoding: false)
do {
try data.write(to: savePath)
print("Save data success")
} catch {
print("Cant save data to path + \(error.localizedDescription)")
}
} catch {
print("Cant not create directory + \(error.localizedDescription)")
}
加载数据:
do {
let savedData = try Data.init(contentsOf: savePath)
print("Get data success")
guard let data = try? NSKeyedUnarchiver.unarchivedObject(ofClass: Person.self, from: savedData) else {
print("Cant cast data")
return
}
print(data?.firstName)
} catch {
print("Cant get saved data ")
}
你的错误在这里:
coder.encode(firstName, forKey: "fisrtName")
打字错误 -> 名字
我通过NSKeyedArchiver将对象存档到数据并成功保存到磁盘,但是当我从NSKeyedUnarchiver获取数据时,我无法将其转换为类型对象。我尝试了很多方法,但 none 成功了。我希望你能帮我解决这个问题。这是我的代码:
class 人:
class Person: NSObject, NSCoding {
func encode(with coder: NSCoder) {
coder.encode(firstName, forKey: "fisrtName")
coder.encode(lastName, forKey: "lastName")
coder.encode(age, forKey: "age")
}
required convenience init?(coder: NSCoder) {
guard let firstName = coder.decodeObject(forKey: "firstName") as? String,
let lastName = coder.decodeObject(forKey: "lastName") as? String else {
return nil
}
let age = coder.decodeInteger(forKey: "age")
self.init(firstname: firstName, lastName: lastName, age: age)
}
let firstName: String
let lastName: String
let age: Int
init(firstname: String, lastName: String, age: Int) {
self.firstName = firstname
self.lastName = lastName
self.age = age
}
}
将数据保存到磁盘:
let tuan = Person(firstname: "Tuan", lastName: "Hoang", age: 21)
let directoryPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let path = directoryPath.first!.appendingPathComponent("PersonData")
let savePath = path.appendingPathComponent("data.plist")
do {
try FileManager.default.createDirectory(at: path, withIntermediateDirectories: true, attributes: nil)
let data = try! NSKeyedArchiver.archivedData(withRootObject: tuan, requiringSecureCoding: false)
do {
try data.write(to: savePath)
print("Save data success")
} catch {
print("Cant save data to path + \(error.localizedDescription)")
}
} catch {
print("Cant not create directory + \(error.localizedDescription)")
}
加载数据:
do {
let savedData = try Data.init(contentsOf: savePath)
print("Get data success")
guard let data = try? NSKeyedUnarchiver.unarchivedObject(ofClass: Person.self, from: savedData) else {
print("Cant cast data")
return
}
print(data?.firstName)
} catch {
print("Cant get saved data ")
}
你的错误在这里:
coder.encode(firstName, forKey: "fisrtName")
打字错误 -> 名字