我有这个错误。我知道有些人已经在其他线程上回答了这个问题,但给出的答案对我来说似乎没有用。
这是我的代码:
人民班:
class People: NSObject, NSCoding {
var firstName : String
var lastName : String
var events : [Event]
init(firstName: String, lastName: String) {
self.firstName = firstName
self.lastName = lastName
self.events = []
}
required init (coder aDecoder: NSCoder) {
firstName = aDecoder.decodeObject(forKey: "firstName") as! String
lastName = aDecoder.decodeObject(forKey: "lastName") as! String
events = aDecoder.decodeObject (forKey: "events") as! [Event]
}
func encode(with aCoder: NSCoder) {
aCoder.encode(firstName, forKey: "firstName")
aCoder.encode(lastName, forKey: "lastName")
aCoder.encode(events, forKey: "events")
}
}
这是我要求保存文件的地方:
func SaveMyPeople(){
let Defaults = UserDefaults.standard
let SavedData = NSKeyedArchiver.archivedData(withRootObject: ArrayPeople)
Defaults.set(SavedData, forKey: "People")
}
这是事件结构:
struct Event{
var date : String
var message : String
}
非常感谢我能得到的任何帮助
答案 0 :(得分:3)
NSCoding
需要NSObjectProtocol
。只有类可以符合NSObjectProtocol
并且您正在使用Struct。
即:
struct Event{
var date : String
var message : String
}
Soroush Khanlou写了一篇关于这个here
的好文章