swift 数据持久化之归档


  1. 需要遵守  NSCoding协议

  2. 实现 NSCoding 的两个方法

 // MARK: ---------------  nscoding 必须实现下面两个方法否则 会报错

   ///   编码 --> obj

    ///  解档方法,aDecoder解码器,将保存在磁盘的二进制文件转换成对象,和反序列化很像

   

 required init?(coder aDecoder: NSCoder) {

        access_token = aDecoder.decodeObjectForKey("access_token") as! String;

        ///  因为decodeObjectForKey 返回的是 anyObject 所有要在后面用as! string 指明它是string类型,

        expires_in = aDecoder.decodeDoubleForKey("expires_in");

         /// decodeIntegerForKey, 已经指明是 int类型, 所以不用再用 as

        expires_Date = aDecoder.decodeObjectForKey("expires_Date") as! NSDate;

        uid = aDecoder.decodeObjectForKey("uid") as! String;

        

    }

    /// obj --> 编码

    func encodeWithCoder(aCoder: NSCoder) {

        

        aCoder.encodeObject(access_token, forKey: "access_token");

        aCoder.encodeDouble(expires_in, forKey: "expires_in");

        aCoder.encodeObject(expires_Date, forKey: "expires_Date");

        aCoder.encodeObject(uid, forKey: "uid");

      }

3 . 调用归档/ 反归档方法


  // 沙盒路径

    staticlet searchPath =NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask,true).last;

    

    staticlet filePath = searchPath!.stringByAppendingString("/userAccount.plist");

    

    

///  保存账号信息,

///  保存账号信息,

    func saveAccount() {

///   swift 中如果想用 静态变量, 需要用 ming.静态变量

     

        NSKeyedArchiver.archiveRootObject(self, toFile: CCUserAccountToken.filePath);

        print(CCUserAccountToken.filePath);

    }

    ///  读取账号信息

  class func loadAccount() -> CCUserAccountToken?{

    

    print(CCUserAccountToken.filePath)

    // 读取账号信息

    if let account =  NSKeyedUnarchiver.unarchiveObjectWithFile(CCUserAccountToken.filePath) as? CCUserAccountToken{

     // 判断是否过期

      let date = account.expires_Date.dateByAddingTimeInterval(account.expires_in);

        if date.compare(NSDate()) == NSComparisonResult.OrderedDescending{

                    return account;

           }

      }

    return nil;

 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值