【问题标题】:Save a table with data from a class保存包含类数据的表
【发布时间】:2019-11-11 14:40:40
【问题描述】:

我想保存并重新读取“课程”中的数据。我今天正在尝试使用 Userdefaults,但它不起作用。

代码:

var Cours = [CoursParNiveau]()

类:

class CoursParNiveau: NSObject, NSCoding {

    var DateLecon:String?
    var HoraireLecon: String?

    init (Date: String, Horaire: String){
        self.DateLecon = Date
        self.HoraireLecon = Horaire
    }

    func encode(with aCoder: NSCoder) {
        aCoder.encode(DateLecon, forKey: "Date")
        aCoder.encode(HoraireLecon, forKey: "Horaire")
    }

    required init?(coder aDecoder: NSCoder) {
        self.DateLecon = aDecoder.decodeObject(forKey: "Date") as? String
        self.HoraireLecon = aDecoder.decodeObject(forKey: "Horaire") as? String
    }
}

【问题讨论】:

  • “但它不起作用”不是问题,请解释您的问题是什么

标签: arrays swift nsuserdefaults


【解决方案1】:

尝试使用Codabledata进行编码/解码以从UserDefaults保存/获取。

使CoursParNiveau 符合Codable 并实现enum CodingKeys 以定义您希望在编码/解码时使用的自定义keys,即

class CoursParNiveau: Codable {
    var DateLecon: String?
    var HoraireLecon: String?

    enum CodingKeys: String, CodingKey {
        case DateLecon = "Date"
        case HoraireLecon = "Horaire"
    }
}

保存到UserDefaults:

do {
    let data = try JSONEncoder().encode(Cours)
    UserDefaults.standard.set(data, forKey: "CoursParNiveau")
} catch {
    print(error)
}

UserDefaults获取:

if let data = UserDefaults.standard.data(forKey: "CoursParNiveau") {
    do {
        self.Cours = try JSONDecoder().decode([CoursParNiveau].self, from: data)
    } catch {
        print(error)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 2022-01-18
    • 2014-08-03
    • 1970-01-01
    • 2022-06-14
    • 2018-12-16
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多