使用NSKeyedArchiver归档
将各种类型的对象存储到文件中,而不仅仅是字符串、数组和字典类型,有一种更灵活的方法。就是利用NSKeyedAarchiver类创建带键(keyed)的档案来完成。
Mac OS X从版本10.2开始支持带键的档案。在此之前,要使用NSArchiver类创建连续的(sequential)归档。连续的归档需要完全按照写入时的顺序读取归档中的数据。
在带键的归档中,每个归档字段都有一个名称。归档某个对象时,会为它提供一个名称,即键。从归档中检索该对象时,是根据这个键来检索的。这样可以按照任意的顺序将对象写入归档并进行检索。另外,如果向类添加了新的实例变量或删除了实例变量,程序也可以进行处理。
注意:默认情况下,只能对NSDate, NSNumber, NSString, NSArray, or NSDictionary来进行归档。
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {@autoreleasepool {//---------------使用NSKeyedArchiver归档(存储各种类型的对象数据)-------------//将字典数据写到文件glossary.archive中NSDictionary *glossary = [NSDictionary dictionaryWithObjectsAndKeys:@"A class defined so other class can inherit from it.",@"abstract class",@"To implement all the methods defined in a protocol.",@"adopt",@"Storing an object for later use.",@"archiving",nil];[NSKeyedArchiver archiveRootObject:glossary toFile:@"glossary.archive"];//将文件glossary.archive中的数据读到字典对象并显示出来NSDictionary *readglossary = [NSKeyedUnarchiver unarchiveObjectWithFile:@"glossary.archive"];for(NSString *key in readglossary)NSLog(@"%@: %@",key,[readglossary objectForKey:key]);}return 0; }
其中,
[NSKeyedArchiver archiveRootObject:glossary toFile:@"glossary.archive"];
将字典glossary写入到文件glossary.archive中。可以为该文件指定任何路径名。在本例中,文件被写入当前目录下。
之后,又通过
NSDictionary *readglossary = [NSKeyedUnarchiver unarchiveObjectWithFile:@"glossary.archive"];
方法将创建的归档文件读入执行程序中。这个语句将指定的文件打开并读取文件的内容,该文件必须是以前归档操作的结果。可以为文件指定完整路径名或相对路径名。
在显示结果之后,可以简单的通过枚举其内容来验证恢复是否成功。
原文http://blog.csdn.net/enuola/article/details/7802371
part2
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;
@interface AddressCard : NSObject<NSCopying,NSCoding>
#pragma mark- NSCoding
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@"AddressCard_name"];
[aCoder encodeObject:self.email forKey:@"AddressCard_email"];
[aCoder encodeInt32:self.salary forKey:@"AddressCard_salary"];
}
- (id)initWithCoder:(NSCoder *)aDecoder{
_name=[[aDecoder decodeObjectForKey:@"AddressCard_name"] retain];
_email=[[aDecoder decodeObjectForKey:@"AddressCard_email"] retain];
_salary=[aDecoder decodeInt32ForKey:@"AddressCard_salary"];
return self;
}
NSString *filePhyName=[filePath stringByAppendingPathComponent:@"ObjectFile"];
BOOL isSuccess=NO;
isSuccess= [NSKeyedArchiver archiveRootObject:objArray toFile:filePhyName];
if (isSuccess) {
NSLog(@"Success");
}else{
NSLog(@"False");
}
// 反归档
NSMutableArray *myObj=[NSKeyedUnarchiver unarchiveObjectWithFile:filePhyName];
for (AddressCard *theCard in myObj) {
[theCard print];
}
转载于:https://www.cnblogs.com/xiaobaizhu/p/4011332.html
使用NSKeyedArchiver归档相关推荐
- 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver
在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...
- ObjC学习11-复制对象与归档
感觉这两个概念有点朦胧,为了学习路线的完整性,这里浅浅地学习下,不懂的以后实践再去想懂~ 1.复制对象 Foundation类实现了名为copy和mutableCopy的方法 可以用这些方法来创建对象 ...
- iOS学习笔记15 序列化、偏好设置和归档
###一.本地持久化 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist ...
- 【转】iOS开发学习计划
转自:简书 一.C语言基础 基本数据类型.基本运算.函数.数组.字符串.指针.结构体.预处理指令.枚举.文件操作.内存管理 二.Objective-C 1.Objective-C基本语法 数据类型.表 ...
- iOS中几种数据持久化方案总结
概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...
- 【iOS数据持久化】Plist使用
iOS数据持久化Plist使用 iOS 端数据持久化就是把数据保存在本地,常用于基本信息储存,应用配置,应用支持数据源,网络请求缓存等.主要有如下几种方式: 方式 介绍 特点 Plist文件 属性列表 ...
- iOS数据存储简要笔记
1. 数据存储常用的方式(1)XML 属性列表(plist)归档 (2)preference(偏好设置) (3)NSKeyedArchiver归档(NSCoding) (4) SQLite3 ...
- iOS应用数据持久化(一)
一.iOS应用常用的数据持久化方式: 1.XML属性列表(plist) 2.preference(偏好设置) 3.NSKeyedArchiver(归档与反归档) 4.SQLite3(数据库) 5.Co ...
- IOS设计模式之四(备忘录模式,命令模式)
本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...
最新文章
- js判断是iOS还是Android
- 逻辑 STANDBY ORA-00368日志应用失败处理一例
- 《Ajax实战》三部曲之“王者归来”
- Spring MVC 单元调试和访问
- DX使用随记--ImageComboBoxEdit
- 虚拟化笔记05 OpenFiler configuration
- PHP对URL进行字符串编码
- java单行字符_十个便捷的单行代码编程技巧
- 在python中下列代码的运行结果是print abc_python与数学
- Android开发之自定义菊花进度条对话框
- 完美者右键扩展菜单管理器 1.2.1 中文绿色版
- android8修改默认壁纸,给surfaceview设置默认背景
- SIFT算法问题issue1
- mysql sql语句面试经典50题_经典sql面试及答案(50)
- hadoop三大组件
- 基于Java实现一个简单的单词本Android App
- 如何使用ArcGIS制作真实的植被
- LinuxShell作业题-1
- Linux系统安全加固指南(万字长文)
- windows脚本创建桌面快捷图标方式
热门文章
- cas 注销不关闭浏览器异常_如何关闭华为手机这些“流氓”推送?
- cnn池化层输入通道数_(pytorch-深度学习系列)CNN中的池化层-学习笔记
- 异步fifo_FPGA设计基础——FIFO的应用
- php内存映射,如何用ZwMapViewOfSection将Driver分配的内存映射到App空间?
- matlab求固有频率,eig()函数求固有频率和有限元软件求固有频率结果不相等
- android studio真机模拟不能拍照_android和ios静态库的生成
- jtoken判断是否包含键_Redis列表键(linkedlist/ziplist)的介绍
- c语言用fun求矩阵,C语言通过函数调用求n*n阶矩阵周边元素绝对值之和
- Python 中三大框架各自的应用场景
- eclipse下java.lang.OutOfMemoryError: PermGen space解决方法