0

这个问题与 -使用 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 来做到这一点。任何帮助将不胜感激。感谢您挽救了我的生命并帮助我实现了梦想。

4

0 回答 0