一、Swift 3.0

1、model

class userModel: NSObject,NSCoding {

    var account: String = ""
var regmobile: String = ""
var sec1_question: String = "" func encode(with aCoder: NSCoder) {
aCoder.encode(account, forKey:"account")
aCoder.encode(regmobile, forKey:"regmobile")
aCoder.encode(sec1_question, forKey:"sec1_question")
aCoder.encode(expert_audit, forKey:"expert_audit") } required init?(coder aDecoder: NSCoder) {
super.init()
account = (aDecoder.decodeObject(forKey:"account")as? String)!
status = (aDecoder.decodeObject(forKey:"status")as? String)!
nickname = (aDecoder.decodeObject(forKey:"nickname")as? String)! } }

2、 归解档

  //  路径:
let userAccountPath = "\(NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first!)/southDream.data" //归档
NSKeyedArchiver.archiveRootObject(model, toFile: userAccountPath + "/userModel") //解档
if NSKeyedUnarchiver.unarchiveObject(withFile: userAccountPath) != nil { let model = NSKeyedUnarchiver.unarchiveObject(withFile: userAccountPath) as? userModel
}

二、OC

四种数据持久化方式 http://www.cocoachina.com/ios/20160617/16739.html

//

//归档数据,并用二进制写入文件
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *keyedArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[keyedArchiver encodeObject:Users forKey:@"users"];//Users已知的保存用户信息的数组
[keyedArchiver finishEncoding];
[data writeToFile:@"归档数据保存路径" atomically:YES];
[objc] view plain copy print?
//读取上面已经保存好的文件,并反归档后在程序中使用数据
NSData *newData = [NSData dataWithContentsOfFile:@"归档数据保存路径"];
NSKeyedUnarchiver *keyedUnArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:newData];
NSArray *users = [keyedUnArchiver decodeObjectForKey:@"users"];
for (User *user in users) {
NSLog(@"name = %@ pw = %@",u.name,u.password);
} 注意:需要归档的数据中如果含有自定义的对象,那么该对象需遵守<NSCoding>协议,并重写如下方法:
[objc] view plain copy print?
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:对象属性 forKey:@"归档的key"];
}
[objc] view plain copy print?
- (id)initWithCoder:(NSCoder *)aDecoder{
self = [super init];
if (self) {
实例变量 = [aDecoder decodeObjectForKey:@"归档的key"];
}
return self;
}

用法扯皮

//先把数据在model中归解档

。h

@property(nonatomic,copy)NSString *email;
@property(nonatomic,copy)NSString *uid;
@property(nonatomic,copy)NSString *mobile;

*is_sec_pwd;

。m

#import "UserModel.h"
static UserModel *model;
@implementation UserModel
+(UserModel *)defaultCellModel{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (!model) {
model = [[UserModel alloc]init];
}
});
return model;
}
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.account forKey:@"account"];
[aCoder encodeObject:self.regmobile forKey:@"regmobile"];
[aCoder encodeObject:self.sec1_question forKey:@"sec1_question"]; } - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{
self = [super init]; if(self) { self.account = [aDecoder decodeObjectForKey:@"account"]; self.regmobile = [aDecoder decodeObjectForKey:@"regmobile"];
self.sec1_question = [aDecoder decodeObjectForKey:@"sec1_question"];
self.headimage = [aDecoder decodeObjectForKey:@"headimage"]; } return self; } @end

NSUserDefaults
 保存
Model数据-》归档-》NSUserdefaults 
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
//不能直接存取NSObject,需要先归档转成NSData
NSData  *data  = [NSKeyedArchiver archivedDataWithRootObject:model];             
 [defaults setObject:data forKey:@"model"];
NSUserdefaults-》解档-》Model数据
NSData *modeldata = [[NSUserDefaults standardUserDefaults]objectForKey:@"model"];
 usermodel = [NSKeyedUnarchiver unarchiveObjectWithData:modeldata];
 
 
 
//文件中保存
#import "ViewController.h"
#import "linePesist.h"
//导入数据模型类
#define CodeString  @"CodeString"
@implementation ViewController
-(NSString *)dataFile{
NSArray *ar = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString *fielpath = [ar objectAtIndex:0];
return [fielpath stringByAppendingPathComponent:@"data.archive"];
//改修后缀名,以免与属性列表创建的文件重复,而加载成旧的的文件。 不用查字典了。。archive表归档
}
- (void)viewDidLoad {
[super viewDidLoad];
NSString *filepath = [self dataFile];
NSLog(@"%@",filepath);
if([[NSFileManager defaultManager]fileExistsAtPath:filepath]) {
//创建2个实例
NSData *data = [[NSData alloc]initWithContentsOfFile:filepath]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
//把已归档的对象读取。赋值给linepesist
linePesist *linepesist =[unarchiver decodeObjectForKey:CodeString]; [unarchiver finishDecoding];
//完成解档
for(int i = 0;i

iOS Swift3.0 OC 数据储存--归档的更多相关文章

  1. AFNetworking配合Swift3.0请求数据

    首先用桥接或pods将AFNetworking导入项目,在这不再赘述,然后创建一个单例NetWorkTools.swift 继承:AFHTTPSessionManager import UIKit i ...

  2. Swift3.0语言教程获取C字符串

    Swift3.0语言教程获取C字符串 Swift3.0语言教程获取C字符串,为了让Swift和C语言可以实现很好的交互,开发者可以使用NSString的cString(using:)方法在指定编码格式 ...

  3. iOS开发 - OC - 实现本地数据存储的几种方式一

    iOS常用的存储方式介绍 在iOS App开发过程中经常需要操作一些需要持续性保留的数据,比如用户对于App的相关设置.需要在本地缓存的数据等等.本文针对OC中经常使用的一下存储方式做了个整理. 常用 ...

  4. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  5. iOS - OC 数据持久化

    1.Sandbox 沙箱 iOS 为每个应用提供了独立的文件空间,一个应用只能直接访问为本应用分配的文件目录,不可以访问其他目录,每个应用自己独立的访问空间被称为该应用的沙盒.也就是说,一个应用与文件 ...

  6. Swift3.0服务端开发(五) 记事本的开发(iOS端+服务端)

    前边以及陆陆续续的介绍了使用Swift3.0开发的服务端应用程序的Perfect框架.本篇博客就做一个阶段性的总结,做一个完整的实例,其实这个实例在<Swift3.0服务端开发(一)>这篇 ...

  7. Swift3.0 函数闭包与OC Block

    刚接触Swift,如有不对的点,欢迎指正.转载请说明出处 定义一个基本函数 //定义一个函数,接收一个字符串,返回一个String类型的值 func test(name:String) -> S ...

  8. Swift3.0 iOS获取当前时间 - 年月日时分秒星期

    Swift3.0 iOS获取当前时间 - 年月日时分秒星期func getTimes() -> [Int] { var timers: [Int] = [] // 返回的数组 let calen ...

  9. iOS开发之资讯类App常用分类控件的封装与实现(CollectionView+Swift3.0+)

    今天博客中,我们就来实现一下一些常用资讯类App中常用的分类选择的控件的封装.本篇博客中没有使用到什么新的技术点,如果非得说用到了什么新的技术点的话,那么勉强的说,用到了一些iOS9以后UIColle ...

随机推荐

  1. Javascript中prototype属性

    prototype作为JS相对比较难理解的一个知识点,在这里发表下自己的理解. 本文将包含以下几部分内容: 1.js prototype的简单介绍, 2.js构造函数的介绍, 3.prototype的 ...

  2. 使用 Bundle 在 Activity 之间交换数据

    [toc] 使用 Bundle 在 Activity 之间交换数据 场景 当一个 Activity 启动另一个 Activity 时,常常会有一些数据需要传过去.因为两个 Activity 之间本来就 ...

  3. Gulp livereload

    平时使用yeoman作为前端部署工具,感觉到yeoman构建工具虽然方便,但是速度和大小总是不尽人意. 最近看到了gulp http://gulpjs.com/ 比较感兴趣随动手一试 gulp的安装以 ...

  4. CORS(跨站资源共享)介绍

    起因 有同学在nginx站点配置中加了一行Access-Control-Allow-Origin *,导致微信中业务数据异常,抓包看http头有两个Access-Control-Allow-Origi ...

  5. React 页面间传值的个人总结

    react 组件之间传值的方案有很多,下面是我个人经验的总结 props 来传递值 传值方式: 通过props 获取值 通过props 提供的func去修改值 优点: 不需要任何第三方的组件,纯rea ...

  6. PAT 1003. Emergency (25) dij+增加点权数组和最短路径个数数组

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  7. 项目实战8—tomcat企业级Web应用服务器配置与会话保持

    tomcat企业级Web应用服务器配置与实战 环境背景:公司业务经过长期发展,有了很大突破,已经实现盈利,现公司要求加强技术架构应用功能和安全性以及开始向企业应用.移动APP等领域延伸,此时原来开发w ...

  8. Android 项目使用TensorFlow

    Android 项目使用TensorFlow 首先需要搭建TensorFlow编译环境 参考:(http://www.cnblogs.com/dyufei/p/8027764.html) Tensor ...

  9. mybatis中使用if标签比较两个字符串是否相等

    <!-- 此处使用if比较是否相等 --> 范例一: <select id="findClientIds" parameterType="map&quo ...

  10. C#使用ManagementObjectSearcher来获取系统信息时会有out of memory的异常

    在开发环境下,时不时出现out of memory的异常,最后是在服务界面重新启动 Windows Management Instrumentation后就好了.