专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构

归档HMUserAccount

  • iOS存储数据的方式
    • 直接写到本地(Plist)
    • NSUserDefaults
    • 归档和解档(对象)
    • Sqlite(数据库)
    • CoreData

归档和解档

  • 实现 NSCoding 协议

    class HMUserAccount: NSObject, NSCoding
    
  • 实现协议方法

    // MARK: - 归档和解档
    /// 归档
    func encode(with aCoder: NSCoder) {
      aCoder.encode(access_token, forKey: "access_token")
      aCoder.encode(uid, forKey: "uid")
      aCoder.encode(expires_in, forKey: "expires_in")
      aCoder.encode(expiresDate, forKey: "expiresDate")
    }
    
    /// 解档
    required init?(coder aDecoder: NSCoder) {
      access_token = aDecoder.decodeObject(forKey: "access_token") as? String
      uid = aDecoder.decodeObject(forKey: "uid") as? String
      expires_in = aDecoder.decodeDouble(forKey: "expires_in")
      expiresDate = aDecoder.decodeObject(forKey: "expiresDate") as? Date
    }
    
  • HMUserAccountViewModel 定义归档路径

    /// 归档路径
    var accountPath = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.plist")
    
  • HMUserAccountViewModel 归档 CZUserAccount 保存账户信息

    ///  保存账户信息
    private func saveUserAccount() {
      if userAccount != nil {
           NSKeyedArchiver.archiveRootObject(userAccount!, toFile: accountPath)
      }
    }
    
    // MARK: - 加载Access Token
    func loadAccessToken(code: String) {
      ...
    
      HMNetworkTool.shared.request(method: HMNetworkMethod.POST, URLString: urlString, parameters: parameters, progress: nil, success: { (_, result) in
          print("result = \(result)")
          let dict = result as! [String: Any]
    
          // 字典转模型
          self.userAccount = HMUserAccount(dict: dict)
          print("userAccount = \(self.userAccount)")
    
          // 保存账户信息
          self.saveUserAccount()
      }) { (_, error) in
          print("error: \(error)")
      }
    }
    

results matching ""

    No results matching ""