代码实现

遵守协议

  1. class AccessToken: NSObject, NSCoding

实现协议方法

  1. // MARK: - 归档&解档
  2. required init(coder aDecoder: NSCoder) {
  3. access_token = aDecoder.decodeObjectForKey("access_token") as! String
  4. expires_in = aDecoder.decodeDoubleForKey("expires_in") as NSTimeInterval
  5. expiresDate = aDecoder.decodeObjectForKey("expiresDate") as? NSDate
  6. uid = aDecoder.decodeIntegerForKey("uid") as Int
  7. }
  8. func encodeWithCoder(aCoder: NSCoder) {
  9. aCoder.encodeObject(access_token, forKey: "access_token")
  10. aCoder.encodeDouble(expires_in, forKey: "expires_in")
  11. aCoder.encodeObject(expiresDate, forKey: "expiresDate")
  12. aCoder.encodeInteger(uid, forKey: "uid")
  13. }

保存和加载账户信息

  1. /// 归档路径
  2. static let archivePath = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last as! String).stringByAppendingPathComponent("account.plist")
  • 保存账户信息
  1. NSKeyedArchiver.archiveRootObject(account, toFile: UserAccount.archivePath)
  • 加载账户信息
  1. /// 加载账户信息
  2. ///
  3. /// :returns: 如果过期返回 nil
  4. class func loadUserAccount() -> UserAccount? {
  5. if let account = NSKeyedUnarchiver.unarchiveObjectWithFile(archivePath) as? UserAccount {
  6. // 判断是否过期
  7. if account.expiresDate!.compare(NSDate()) == NSComparisonResult.OrderedDescending {
  8. return account
  9. }
  10. }
  11. return nil
  12. }

测试加载用户账户

  • 在 AppDelegate 中增加如下代码
  1. /// 全局用户账户
  2. var sharedUserAccount = UserAccount.loadUserAccount()

由于后续所有网络访问都基于用户账户中的 access_token,因此在 AppDelegate 中定义一个全局变量,从而避免重复加载

修改 BaseTableViewController 中的用户是否登录判断

  1. /// 用户登录标记
  2. var userLogin = sharedUserAccount != nil

归档 & 解档的更多相关文章

  1. IOS数据存储之归档/解档

    前言: 前天学习了NSUserDefaults,我们知道NSUserDefaults不能保存自定义对象,所以我们今天来认识一下归档(NSKeyedArchiver)和解档(NSKeyedUnarchi ...

  2. iOS开发中的4种数据持久化方式【一、属性列表与归档解档】

    iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中, ...

  3. iOS 浅复制、深复制、完全复制的知识点梳理验证(附加归档解档)

    在之前转载的一片文章中,文中对浅复制和深复制进行了详细的解读,同时还提到了深复制(one-level-deep copy).完全复制(true copy)的概念,并指出iOS开发中的深复制是单层深赋值 ...

  4. 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver

    在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...

  5. iOS 浅赋值、深复制、全然复制的知识点梳理验证(附加归档解档)

    写于前: 在之前转载的一片文章中.文中对浅复制和深复制进行了具体的解读,同一时候还提到了深复制(one-level-deep copy).全然复制(true copy)的概念,并指出iOS开发中的深复 ...

  6. iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档

    1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...

  7. IOS s数据存储之归档解档

    #import <Foundation/Foundation.h> @interface Student : NSObject <NSCoding>; @property(no ...

  8. plist文件的归档,解档

    plist文件 plist的根Type只能是字典(NSDictionary)或者是数组(NSArray)所以归档时我们只能将数组或字典保存到plist文件中,但是NSString也能通过归档保存到pl ...

  9. 用runtime来重写Coder和deCode方法 归档解档的时候使用

    当我们归档自定义对象的时候,可以重写自定义Model的的encodeWithCoder和initWithCoder 开始的大概是这样的,当属性非常多的时候 这种方式就会觉得不还好 好像重复在做一样的事 ...

随机推荐

  1. 游戏开发学习ing

    创建工程 python cocos.py new HelloWorld -p com.cocos2dx.org -l cpp -d myprojects 这个命令就是运行python然后编译cos.p ...

  2. <转自原博客> NOIP2008 传纸条

    小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以 ...

  3. BZOJ3876 [Ahoi2014&Jsoi2014]支线剧情 【有上下界费用流】

    题目 [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情.这些游戏往往 都有很多的支线剧情,现在JYY想花费最少 ...

  4. 虚拟机——vmtools安装出现Detected GCC binary at usr.bin.gcc.

    在安装VMWare Tools遇到过这样一个问题 Searching for GCC... Detected GCC binary at "/usr/bin/gcc". The p ...

  5. linux——rhel安装yum

    在进行下面的操作之前,一定要确保网络正常,如果没有网络,下面的所有操作一个都不能实现.(下次会写个本地源的配置,这个就可以离线的状态下进行,需要用到系统的镜像文件,安装好系统之后不要删掉.) 首先配置 ...

  6. java中TCP两个例子大写服务器和文件上传

    大写服务器的实例: package com.core.net; import java.io.BufferedReader; import java.io.BufferedWriter; import ...

  7. 《c程序设计语言》读书笔记-5.4-指针实现strend

    #include <stdio.h> #include <math.h> #include <stdlib.h> #include <string.h> ...

  8. Educational Codeforces Round 42 (Rated for Div. 2) C

    C. Make a Square time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  9. redis 的命令总结

    此博客为技术收集和个人的学习积累,如侵犯了您的权益,请联系我,我会及时删除,谢谢 [Redis] redis-cli 命令总结 Redis提供了丰富的命令(command)对数据库和各种数据类型进行操 ...

  10. kali 开启smb

    root@kali:~# smbpasswd -a rootNew SMB password:Retype new SMB password:root@kali:~# vi /etc/samba/sm ...