UserDefaults 总是返回 nil

问题描述

我有这个结构

//GLOBAL STRUCT USER
struct User: Codable{
    var info: UserInfo?
}
//MARK:-USER INFO
struct UserInfo: Codable{
    var companyName: String?
    var companyAddress: String?
    var companyCity: String?
    var companyCap: String?
    var companyTelephone: String?
    var companyFax: String?
    var companyMobile: String?
    var companyWeb: String?
    var companyEmail: String?
    var companyVat: String?
    var companySDI: String?
    var companyPEC: String?
    var companyLogo: Data?
    
}

我用这个来保存和读取数据:

struct LocalData{
    static var userDatas: User {
            get {
                guard let data = UserDefaults.standard.data(forKey: #function) else {
                    return User(info: UserInfo(companyName: "",companyAddress: "",companyCity: "",companyCap: "",companyTelephone: "",companyFax: "",companyMobile: "",companyWeb: "",companyEmail: "",companyVat: "",companySDI: "",companyPEC: "",companyLogo: Data()))
                    
                }
                do {
                    let datas = try JSONDecoder().decode(User.self,from: data)
                    return datas
                } catch {
                    print(error)
                }
                return User(info: UserInfo(companyName: "",companyLogo: Data()))
            }
            set{
                guard let data = try? JSONEncoder().encode(newValue) else { return }
                UserDefaults.standard.set(data,forKey: #function)
            }
        }

}

如果我存储任何数据,例如:

LocalData.userDatas.info?.companyAddress = "TEST"

当我重新启动应用程序(不是从后台,而是关闭并重新打开)时,如果我在“viewWillAppear”中放置一个中断并写入控制台

po LocalData.userDatas

LocalData.userDatas 中的所有数据都为零

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)