博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios 归档操作 NSCoding
阅读量:6610 次
发布时间:2019-06-24

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

hot3.png

NSCoding 跟其他存储方式略有不同,他可以存储对象

对象存储的条件是: 对象需要遵守 NSCoding 协议

存储的时候需要 调用 encodeWithCoder 方法
读取的时候需要调用initWithCoder 方法
[NSKeyedArchiver archiveRootObject:stu toFile:path]; 存储 

NSKeyedUnarchiver unarchiveObjectWithFile:path 读取

对象代码

[objc]  

  1. - (IBAction)save {  

  2.     // 1.新的模型对象  

  3.     MJStudent *stu = [[MJStudent alloc] init];  

  4.     stu.no = @"42343254";  

  5.     stu.age = 20;  

  6.     stu.height = 1.55;  

  7.       

  8.     // 2.归档模型对象  

  9.     // 2.1.获得Documents的全路径  

  10.     NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];  

  11.     // 2.2.获得文件的全路径  

  12.     NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];  

  13.     // 2.3.将对象归档  

  14.     [NSKeyedArchiver archiveRootObject:stu toFile:path];  

  15. }  

  16.   

  17. - (IBAction)read {  

  18.     // 1.获得Documents的全路径  

  19.     NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];  

  20.     // 2.获得文件的全路径  

  21.     NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];  

  22.       

  23.     // 3.从文件中读取MJStudent对象  

  24.     MJStudent *stu = [NSKeyedUnarchiver unarchiveObjectWithFile:path];  

  25.       

  26.     NSLog(@"%@ %d %f", stu.no, stu.age, stu.height);  

  27. }  

<EMBED id=ZeroClipboardMovie_3 height=18 name=ZeroClipboardMovie_3 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=3&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

 

[objc]  

保存读取

  1. #import "MJStudent.h"  

  2. @interface MJStudent()   

  3. @end  

  4. @implementation MJStudent  

  5.   

  6. /** 

  7.  *  将某个对象写入文件时会调用 

  8.  *  在这个方法中说清楚哪些属性需要存储 

  9.  */  

  10. - (void)encodeWithCoder:(NSCoder *)encoder  

  11. {  

  12.     [encoder encodeObject:self.no forKey:@"no"];  

  13.     [encoder encodeInt:self.age forKey:@"age"];  

  14.     [encoder encodeDouble:self.height forKey:@"height"];  

  15. }  

  16.   

  17. /** 

  18.  *  从文件中解析对象时会调用 

  19.  *  在这个方法中说清楚哪些属性需要存储 

  20.  */  

  21. - (id)initWithCoder:(NSCoder *)decoder  

  22. {  

  23.     if (self = [super init]) {  

  24.         // 读取文件的内容  

  25.         self.no = [decoder decodeObjectForKey:@"no"];  

  26.         self.age = [decoder decodeIntForKey:@"age"];  

  27.         self.height = [decoder decodeDoubleForKey:@"height"];  

  28.     }  

  29.     return self;  

  30. }  

  31. @end  

<EMBED id=ZeroClipboardMovie_2 height=18 name=ZeroClipboardMovie_2 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=2&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

 

[objc]  

  1. #import <Foundation/Foundation.h>  

  2.   

  3. @interface MJStudent : NSObject  <NSCoding>  

  4. @property (nonatomiccopyNSString *no;  

  5. @property (nonatomic, assign) double height;  

  6. @property (nonatomic, assign) int age;  

  7. @end  

<EMBED id=ZeroClipboardMovie_1 height=18 name=ZeroClipboardMovie_1 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=1&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

 

转载于:https://my.oschina.net/linyuFish0312/blog/650042

你可能感兴趣的文章
vmware workstation14永久激活密钥分享
查看>>
iOS 多线程 之 GCD(大中枢派发)(一)
查看>>
Myeclipse中打开接口实现类的快捷键
查看>>
删除sql dump中的AUTO_INCREMENT
查看>>
使用JdbcTemplate和JdbcDaoSupport
查看>>
C博客作业--指针
查看>>
版本12.2.0.1.0数据库,复制种子数据库快速创建租户数据库PDB
查看>>
mysql for Mac 下创建数据表中文显示为?的解决方法
查看>>
Glibc 和 uClibc
查看>>
VMware 虚拟机的虚拟磁盘编程知识点扫盲之二
查看>>
vs2012中自带IIS如何让其他电脑访问
查看>>
关于termux在手机上搭载Linux系统,python,ssh
查看>>
Redux:异步操作
查看>>
Mysql学习第三课-分析二进制日志进行增量备份和还原
查看>>
2-11
查看>>
POJ1961 Period [KMP应用]
查看>>
如何在 Android 手机上安装 Ubuntu 13.04
查看>>
HDU 6073 - Matching In Multiplication | 2017 Multi-University Training Contest 4
查看>>
C语言 scanf()和gets()函数的区别
查看>>
如何检测域名是否被微信屏蔽 微信域名检测接口API是如何实现
查看>>