在数据存储上比较常用,下面给大家简单介绍一下归档:
一般情况下我们先从网络上获取json数据,然后简历数据模型,最后将数据模型存储,但是归档不是所有的数据类型都可以存储,归档存储的类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary五种类型,如果不能归档,我们可以尝试转化为这五种中的任何一种再进行存储
//这里要遵守nscoding协议class UserData: NSObject , NSCoding { var expires_Date:NSDate? var uid:String? var avatar_large: String? var screen_name: String? // 1.0用字典初始化模型 init(dict:[String:AnyObject]) { super.init() setValuesForKeysWithDictionary(dict) } //如果字典中又缺少值的情况不会报错 override func setValue(value: AnyObject?, forUndefinedKey key: String) { print(key) } //MARK: NACODING协议 //2.0 将对象写入到文件中 func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeObject(access_token, forKey: "access_token") aCoder.encodeObject(expires_in, forKey: "expires_in") aCoder.encodeObject(uid, forKey: "uid") aCoder.encodeObject(expires_Date, forKey: "expires_Date") } //3.0 从文件中读取对象 required init?(coder aDecoder: NSCoder) { access_token = aDecoder.decodeObjectForKey("access_token") as? String expires_in = aDecoder.decodeObjectForKey("expires_in") as? NSNumber uid = aDecoder.decodeObjectForKey("uid") as? String expires_Date = aDecoder.decodeObjectForKey("expires_Date") as? NSDate } //下面定义两个方法供外部使用 //4.0 保存授权模型 func saveAccount() { let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! let filePath = (path as NSString).stringByAppendingPathComponent("user.plist") print("filePath \(filePath)") NSKeyedArchiver.archiveRootObject(self, toFile: filePath) } //5.0 加载授权模型 class func loadAccount() -> UserAccount? { let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! let filePath = (path as NSString).stringByAppendingPathComponent("user.plist") print("filePath \(filePath)") let account = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? UserAccount return account }