我的 Userdefault 没有保存数据,也没有被 ObjectMapper 快速映射
Posted
技术标签:
【中文标题】我的 Userdefault 没有保存数据,也没有被 ObjectMapper 快速映射【英文标题】:My Userdefault is not saving data and its not being mapped by ObjectMapper in swift 【发布时间】:2020-06-11 13:52:48 【问题描述】:我希望客户注册并在输入数据后将其映射到用户默认值并保存在那里,当我想验证用户时,我调用一个函数验证获取从用户保存的数据以验证用户但 GET 中的数据映射不起作用
var UserInfoDefualts: UserModel
set
let userJson = try! JSONEncoder().encode(newValue)
let jsonString = String(data: userJson, encoding: .utf8)!
KeychainWrapper.standard.set(jsonString, forKey: "UserData")
get
let userJosn = KeychainWrapper.standard.string(forKey: "UserData") ?? ""
let userData = Mapper<UserModel>().map(JSONString: userJosn) ?? UserModel()
return userData
get 未映射数据 userdata 始终为 NIL,其中设置其 Filled 正确
注册功能
@IBAction func continueButtonClicked(_ sender: UIButton)
ApiServices.shared.signUp(name: fullName.text!, number: phoneNumber.text!, gender: 1, date: birthDate.text!) (result, statusCode) in
print(result)
if statusCode == 200
let userData = result
print(userData.fullName)
UserInfoDefualts = userData
ScreenLoader().pushVC(rootView: self, viewController: Verify_VC)
// Shared.logIn(userData: userData)
验证函数
@IBAction func verifyClicked(_ sender: Any)
var data = UserInfoDefualts
ApiServices.shared.verifyUser(userID: UserInfoDefualts.userId ?? 0, otpCode: self.code) (result, statusCode) in
if statusCode == 200
ScreenLoader().pushVC(rootView: self, viewController: Welcome_VC)
【问题讨论】:
再次忘记过时的ObjectMapper
并使用Decodable
解码数据。
@vadian 你能告诉我怎么做吗,我已经将 Decodable 添加到我的 Struct USERMODEL
【参考方案1】:
在结构中将Encodable
替换为Codable
并删除与ObjectMapper
相关的所有代码
然后用
替换计算的属性var userInfoDefaults: UserModel?
set
let userJson = try! JSONEncoder().encode(newValue!)
let jsonString = String(data: userJson, encoding: .utf8)!
KeychainWrapper.standard.set(jsonString, forKey: "UserData")
get
guard let userJosn = KeychainWrapper.standard.string(forKey: "UserData") else return nil
let data = Data(userJosn.utf8)
do
return try JSONDecoder().decode(UserModel.self, from: data)
catch
print(error)
return nil
由于UserModel
没有自定义初始化程序,因此计算属性必须是可选的。所以你必须在IBAction中写
guard let data = userInfoDefaults else return
【讨论】:
【参考方案2】:您可以将 objectmapper 对象存储在 userdefault 中,如下所示:
if let userInfo = Mapper<SignInModel>().map(JSONObject: dictionary["signup"])
if let JSONString = Mapper().toJSONString(userInfo, prettyPrint: true)
//User Info:-
let encodedData: Data = NSKeyedArchiver.archivedData(withRootObject: JSONString)
UserDefaults.standard.set(encodedData, forKey: "userinfo")
【讨论】:
以上是关于我的 Userdefault 没有保存数据,也没有被 ObjectMapper 快速映射的主要内容,如果未能解决你的问题,请参考以下文章
将值附加到数据数组并保存在 Userdefault swift
如何在 Swift 中将 JSON 数据保存到 UserDefault? [复制]
Cocos2d-x v3.3中UserDefault保存的XML文件位置
Cocos2d-x v3.3中UserDefault保存的XML文件位置