loadSession возвращает массив уроков."как?"проверим на тип.Поскольку неархивированный объект не был массивом, он вернет ноль.Вы архивируете его как объект урока и разархивируете его как объект массива урока.
static func loadLessons() -> Lessons? {
let data = UserDefaults.standard.data(forKey: "lessons")
return try! NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data!) as? Lessons
}
Ниже приведен код, который работает.
class Lessons : NSObject,NSCoding {
var definitionText:String
var photoURL:String
init(definition:String,photoURL:String) {
self.definitionText = definition
self.photoURL = photoURL
}
func encode(with aCoder: NSCoder) {
aCoder.encode(self.definitionText, forKey: "definitionText")
aCoder.encode(self.photoURL, forKey: "photoURL")
}
required convenience init?(coder aDecoder: NSCoder) {
self.init(definition: "", photoURL: "")
self.definitionText = aDecoder.decodeObject(forKey: "definitionText") as! String
self.photoURL = aDecoder.decodeObject(forKey: "photoURL") as! String
}
}
class SaveUtil {
static func saveLessons(lessons: Lessons) {
let data = NSKeyedArchiver.archivedData(withRootObject: lessons)
UserDefaults.standard.set(data, forKey: "lessons")
}
static func loadLessons() -> Lessons? {
let data = UserDefaults.standard.data(forKey: "lessons")
return try! NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data!) as? Lessons
}
}
После того, как вы запустите свой код, он вернетобъект.
let lessons = Lessons(definition: "testo", photoURL: "photo.jpg")
SaveUtil.saveLessons(lessons: lessons)
let x = SaveUtil.loadLessons()
print("\(x?.photoURL)")