专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构
解档HMUserAccount
在程序运行的时候需要使用
AccessToken
去访问新浪服务器的数据.为了防止每次程序重新启动都需要去加载AccessToken
,我们已经将AccessToken
保存到了沙盒里面.HMUserAccountViewModel
提供加载沙盒里面的HMUserAccount
方法loadUserAccount
/** 从沙盒里面加载用户账号 returns: 之前保存的用户账号 */ private func loadUserAccount() -> HMUserAccount? { // 从沙盒里面解档账号 let account = NSKeyedUnarchiver.unarchiveObject(withFile: accountPath) as? HMUserAccount // 解档并不一定能解档出 // 判断账号是有在有效期内 // account?.expiresDate = Date(timeIntervalSinceNow: -100) if account != nil && account?.expiresDate?.compare(Date()) == ComparisonResult.orderedDescending { print("加载到有效的账号: \(account)") return account } // 没有加载到可用账号 return nil }
在
HMUserAccountViewModel
的init
方法中调用loadUserAccount
, 并将加载的结果赋值给userAccount
,以后程序中要使用HMUserAccount
都访问它(userAccount)
/// 私有化构造函数 private override init() { super.init() // 在单例一创建的时候加载沙盒中的账号,并赋值给 userAccount userAccount = loadUserAccount() }
- 在
AppDelegate
中测试加载账号// TODO: 加载账号,能加载到账号表示用户登录了,加载不到账号表示用户没有登录 let userAccount = HMUserAccountViewModel.shared.userAccount print("AppDelegate加载账号: userAccount: \(userAccount)")
- 运行结果: 可以加载保存在沙盒中的
HMUserAccount
测试
AccessToken
过期的情况.重新给加载出来的账号
设置expiresDate
/** 从沙盒里面加载用户账号 returns: 之前保存的用户账号 */ private func loadUserAccount() -> HMUserAccount? { // 从沙盒里面解档账号 let account = NSKeyedUnarchiver.unarchiveObject(withFile: accountPath) as? HMUserAccount // 解档并不一定能解档出 // 判断账号是有在有效期内 account?.expiresDate = Date(timeIntervalSinceNow: -100) if account != nil && account?.expiresDate?.compare(Date()) == ComparisonResult.orderedDescending { print("加载到有效的账号: \(account)") return account } // 没有加载到可用账号 return nil }
- 运行结果: 加载不到账号,因为
AccessToken
过期了. - 至此,加载和保存
AccessToken
相关的操作就完成了