这个问题与 - Saving custom SWIFT class with NSCoding to UserDefaults并不相同,因为有两个类相互连接,我不知道为它们实现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。 任何帮助将非常感激。感谢您拯救我的生命,帮助我成为现实的梦想。