1.对用户的模型数据(自定义类:HCUserModel)进行归档和解档
1.1 需要遵循NSCoding协议
1.2 需要实现funcencode(with aCoder:NSCoder){}归档方法
1.3需要实现requiredinit(coder aDecoder:NSCoder){}解档方法
import UIKit class YMUserAccount:NSObject,NSCoding { //MARK:-属性 //授权AcccessToken var access_token:String? //过期时间-->秒 var expires_in:TimeInterval=0.0{ didSet{ expires_date=Date(timeIntervalSinceNow: expires_in) } } //用户ID var uid :String? //昵称 var screen_name:String? var avatar_large:String? //额外参数 var expires_date:Date? //MARK:-自定义构造函数 init(dic:[String:AnyObject]) { super.init() access_token=dic["access_token"] as! String? uid=dic["uid"] as! String? expires_in=dic["expires_in"] as! TimeInterval } override func setValuesForKeys(_ keyedValues: [String : Any]) { } //MARK:-解档 归档 //解档的方法 required init?(coder aDecoder: NSCoder) { super.init() access_token=aDecoder.decodeObject(forKey: "access_token") as! String? uid=aDecoder.decodeObject(forKey: "uid") as! String? expires_date=aDecoder.decodeObject(forKey: "expires_date") as! Date? screen_name=aDecoder.decodeObject(forKey: "screen_name") as! String? avatar_large=aDecoder.decodeObject(forKey: "avatar_large") as! String? } //归档的方法 func encode(with aCoder: NSCoder) { aCoder.encode(access_token,forKey: "access_token") aCoder.encode(uid,forKey: "uid") aCoder.encode(expires_date,forKey: "expires_date") aCoder.encode(screen_name,forKey: "screen_name") aCoder.encode(avatar_large,forKey: "avatar_large") } }
将account对象保存到本地 //获取沙盒路径 var accountPath=NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,true).first! accountPath+="/userAccount.plist" print("路径:"+accountPath); NSKeyedArchiver.archiveRootObject(account,toFile: accountPath)
//从沙盒中读取归档的信息 var accountPath=NSSearchPathForDirectoriesInDomains(.documentDirectory,true).first! accountPath+="/userAccount.plist" let account=NSKeyedUnarchiver.unarchiveObject(withFile: accountPath) as? YMUserAccount