一、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. Python StringIO与BytesIO、类文件对象

    StringIO与BytesIO StringIO与BytesIO.类文件对象的用途,应用场景,优.缺点. StringIO StringIO 是io 模块中的类,在内存中开辟的一个文本模式的buff ...

  2. 关于javascript removeChild的那些事

    关于javascript removeChild的那些事 今天给removeChild搞死了,弄了几个小时,上代码 <ul id="myList"> <li> ...

  3. input type="radio" 赋值问题

    之前项目中 后台传值 然后赋给单选input   在网上找了好久,现在有时间了,整理一下  ,方便以后有人会用到. $('radio[name="sex"][value'" ...

  4. 2715:谁拿了最多奖学金-poj

    总时间限制:  1000ms 内存限制:  65536kB 描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成 ...

  5. Java基础回顾(3)

    数组:用一种数据类型的集合 ★数组元素下标从0开始. 数组的复制.扩容: ①.System.arraycopy(源数组, 源数组的初始下标,                     目标数组, 目标数 ...

  6. Spring MVC 学习总结(八)——Spring MVC概要与环境配置(IDEA+Maven+Tomcat7+JDK8、示例与视频)

    一.MVC概要 MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑.数据.显示分离的方法组织代码,MVC主要作用是降低了视图与业务 ...

  7. 机器学习算法 - 支持向量机SVM

    在上两节中,我们讲解了机器学习的决策树和k-近邻算法,本节我们讲解另外一种分类算法:支持向量机SVM. SVM是迄今为止最好使用的分类器之一,它可以不加修改即可直接使用,从而得到低错误率的结果. [案 ...

  8. Mybatis分页插件PageHelper使用

    一. Mybatis分页插件PageHelper使用  1.不使用插件如何分页: 使用mybatis实现: 1)接口: List<Student> selectStudent(Map< ...

  9. C++反汇编第四讲,反汇编中识别继承关系,父类,子类,成员对象

    C++反汇编第四讲,反汇编中识别继承关系,父类,子类,成员对象 讲解目录: 1.各类在内存中的表现形式   备注: 主要复习开发知识,和反汇编没有关系,但是是理解反汇编的前提.     2.子类继承父 ...

  10. SpringMvc+JavaConfig+Idea 搭建项目

    1.介绍 之前搭建SpringMvc项目要配置一系列的配置文件,比如web.xml,applicationContext.xml,dispatcher.xml.Spring 3.X之后推出了基于Jav ...