这个问题与 -使用 NSCoding 将自定义 SWIFT 类保存到 UserDefaults不同,它是不同的,因为有 2 个类相互连接,我不知道为它们实现 NSCoding。我是初学者,我已经尝试了 6 个多小时来解决这个问题。顺便说一句,这不是重复的,因为这里的所有解决方案都已过时。我的应用程序中有 2 个主要的自定义类(超类和子类),并且我想使用 UserDefaults 来永久保存数据。
第一课:
class Day {
var dayName: String
var subjects: [Subject]?
init(dayName: String) {
self.dayName = dayName
}
}
第二类:
class Subject: Day {
var subjectName: String
var startsAt: String?
init(dayName: String,subjectName: String) {
self.subjectName = subjectName
super.init(dayName: dayName)
}
}
我尝试像这样保存 Subject 类的一个实例:
UserDefaults.standard.set(Subject(dayName: "Monday",subjectName: "Programming"), forKey: "subject")
let savedSubject = UserDefaults.standard.object(forKey: "subject") as? Subject
print(savedSubject!.subjectName)
然后当我运行应用程序时,我得到一个崩溃说 -
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“尝试插入非属性列表对象 School_Class_Scedule.Subject 用于关键主题”
我做了很多研究,发现我应该将主题转换为 NSData 但我不知道如何使用 XCode 9 中的 swift 3 或 4 来做到这一点。任何帮助将不胜感激。感谢您挽救了我的生命并帮助我实现了梦想。