Этот вопрос отличается от - Сохранение пользовательского класса SWIFT с NSCoding в 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, но я не знаю, как это сделать с помощью swift 3 или 4 в XCode 9. Буду очень признателен за любую помощь. Спасибо, что спасли мне жизнь и помогли осуществить мою мечту.
NSCoding
, если вы собираетесь сохранить пользовательский класс вUserDefaults
, если только все свойства не являются списком свойств или совместимы с JSON, тогда вы также можете использовать соответствующую сериализацию (в Swift 4 дажеCodable
). - person vadian   schedule 03.12.2017NSCoding
. - person vadian   schedule 03.12.2017