Сохранение/загрузка пользовательского объекта массива с использованием UserDefaults в Swift

Я использовал следующую ссылку Как использовать NSUserDefaults для хранения массива пользовательских классов в Swift? для создания класса UserHours и сохранения/загрузки данных из UserDefaults в Swift. Однако, когда я это делаю, новые объекты, добавленные к классу, не сохраняются/загружаются. Не могли бы вы помочь мне понять, что я делаю неправильно здесь. Я не получаю никаких журналов ошибок на экране, которые могут помочь мне в отладке.

class Database {

    var users = [String: User]()
    var vacationRequest = [VacationRequest]()
    var userHours = [UserHours]()
    let userID = DatabaseInstance.userID
    let userDefaults = UserDefaults.standard

    func addUserHours(hours: UserHours) {
        self.userHours.append(hours)
        let encodedData = NSKeyedArchiver.archivedData(withRootObject: self.userHours)
        userDefaults.set(encodedData, forKey: DatabaseInstance.userhour)
        userDefaults.synchronize()
    }

    func getUserHours() -> [UserHours] {
        if let data = userDefaults.data(forKey: DatabaseInstance.userhour),
            let userHoursList = NSKeyedUnarchiver.unarchiveObject(with: data) as? [UserHours] {
            self.userHours = userHoursList;
            return userHoursList;
        } else {
            print("There is an issue")
        }
        return self.userHours
    }
}



class UserHours: NSObject, NSCoding{
    var userId: String = ""
    var date: Date = Date()
    var startTime: Date = Date()
    var mealStart: Date = Date()
    var mealEnd: Date = Date()
    var endTime: Date = Date()

    init(userId: String, date: Date, startTime: Date, mealStart: Date, mealEnd : Date, endTime: Date) {
        self.userId = userId
        self.date = date
        self.startTime = startTime
        self.mealStart = mealStart
        self.mealEnd = mealEnd
        self.endTime = endTime
    }

    required convenience init(coder decoder: NSCoder) {
        let userId = decoder.decodeObject(forKey: "userId") as! String
        let date = decoder.decodeObject(forKey: "date") as! Date
        let startTime = decoder.decodeObject(forKey: "startTime") as! Date
        let mealStart = decoder.decodeObject(forKey: "mealStart") as! Date
        let mealEnd = decoder.decodeObject(forKey: "mealEnd") as! Date
        let endTime = decoder.decodeObject(forKey: "endTime") as! Date
        self.init(userId: userId, date: date, startTime: startTime, mealStart: mealStart, mealEnd : mealEnd, endTime: endTime)
    }

    func encode(with coder: NSCoder) {
        coder.encode(userId, forKey: "userId")
        coder.encode(date, forKey: "date")
        coder.encode(startTime, forKey: "startTime")
        coder.encode(mealStart, forKey: "mealStart")
        coder.encode(mealEnd, forKey: "mealEnd")
        coder.encode(endTime, forKey: "endTime")
    }
}

person surabhya    schedule 28.11.2017    source источник
comment
вы получаете какие-либо ошибки в консоли?   -  person Oxthor    schedule 28.11.2017
comment
@Oxthor нет, я не такой. Но данные не сохраняются. Не знаю почему.   -  person surabhya    schedule 28.11.2017