博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS数据持久化--归档
阅读量:6406 次
发布时间:2019-06-23

本文共 2128 字,大约阅读时间需要 7 分钟。

一、简介

  在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦;

  偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息

  归档:因为前两者都有一个致命的缺陷,只能存储常用的类型。归档可以实现把自定义的对象存放在文件中。

 

二、使用

#import "ViewController.h"#import "Person.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];    //1.创建对象    Person *p=[[Person alloc]init];    p.name=@"deng";    p.age=23;    p.height=1.7;    //2.获取文件路径    NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];    NSString *path=[docPath stringByAppendingPathComponent:@"person.deng"];    NSLog(@"path=%@",path);        //3.将自定义的对象保存到文件中    [NSKeyedArchiver archiveRootObject:p toFile:path];}-(void)touchesBegan:(NSSet
*)touches withEvent:(UIEvent *)event{ //1.获取文件路径 NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; NSString *path=[docPath stringByAppendingPathComponent:@"person.deng"]; NSLog(@"path=%@",path); //2.从文件中读取对象 Person *p=[NSKeyedUnarchiver unarchiveObjectWithFile:path]; NSLog(@"%@,%d,%.1f",p.name,p.age,p.height);}@end

 

person.h文件

#import 
@interface Person : NSObject
@property(nonatomic,strong)NSString *name;@property(nonatomic,assign)int age;@property(nonatomic,assign)double height;@end

person.m

#import "Person.h"@implementation Person-(void)encodeWithCoder:(NSCoder *)aCoder{    [aCoder encodeObject:self.name forKey:@"name"];    [aCoder encodeInt:self.age forKey:@"age"];    [aCoder encodeDouble:self.height forKey:@"height"];} -(id)initWithCoder:(NSCoder *)aDecoder{    if (self == [super init]) {       self.name = [aDecoder decodeObjectForKey:@"name"];       self.age = [aDecoder decodeIntForKey:@"age"];       self.height = [aDecoder decodeDoubleForKey:@"height"];    }    return self;}@end

三、注意

1.一定要实现协议<NSCoding>,并在要保存对象的.m文件中实现两个协议方法(如果不实现会报错):

  -(void)encodeWithCoder:(NSCoder *)aCoder

   -(id)initWithCoder:(NSCoder *)aDecoder

2.保存保存时对象的属性类型一定要注意,要用对应的方法保存对应的属性。

3.读取出来的数据一定要赋给对象的属性。

 

转载于:https://www.cnblogs.com/huadeng/p/7081359.html

你可能感兴趣的文章
leetcode 415. Add Strings
查看>>
嵌入式软件设计第10次实验报告
查看>>
Poj3684题解 Physics Experiment 弹性碰撞
查看>>
cloudera卸载
查看>>
推荐5款简洁美观的Hexo主题
查看>>
Web 性能压力测试工具(WebBench)
查看>>
Web前端性能优化全攻略
查看>>
PHPCMS源码底层分析 phpcms\base.php(编写中,未完成)
查看>>
Android 使用NDK编译sipdroid Library
查看>>
2012 MUTC 3 总结
查看>>
slim中的参数获取
查看>>
mysql5.7.22 zip 版安装
查看>>
time.setToNow() 取当前时间,月份有误
查看>>
arcengine9.3与10开发授权代码
查看>>
UEFI+GPT下安装Win10和Ubuntu16.04双系统相关问题(引导、无线连不上网)
查看>>
【题解】最大公约数之和 V3 51nod 1237 杜教筛
查看>>
架构师速成6.7-设计开发思路-uml 分类: 架构师速成 ...
查看>>
js设置radio选中
查看>>
8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现...
查看>>
第一次发博客-说说我的B/S开发框架(asp.net mvc + web api + easyui)
查看>>