ios专题 -归档保存数据
关键类:NSKeyedArchiver 与 NSKeyedUnarchiver
采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。前一个方法告诉系统怎么对对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码
例子:
LQAnimal.h
#import <UIKit/UIKit.h> @interface LQAnimal : NSObject <NSCoding> @property (strong) NSString *animalType; @end
LQAnimal.m
#import "LQAnimal.h" @implementation LQAnimal @synthesize animalType = _animalType; /*
*从未归档数据中,初始化对象
*/
- (id) initWithCoder:(NSCoder *) theCoder
{
LQAnimal *what = [[LQAnimal alloc] init]; what.animalType = [theCoder decodeObjectForKey:@"type"]; return what;
} /*
*归档时,编码
*/
- (void) encodeWithCoder:(NSCoder *)theCoder
{
[theCoder encodeObject:self.animalType forKey:@"type"];
} @end
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[];
NSString *detailPath = [NSString stringWithFormat:@"%@/animal.txt",path];
LQAnimal *animal = [[LQAnimal alloc] init];
//animal.animalType = @" little fat sheep ";
animal.animalType = @" big fat sheep ";
BOOL isOK = [NSKeyedArchiver archiveRootObject:animal toFile:detailPath];
if (isOK) {
NSLog(@"save object success!");
LQAnimal *getAnimal = [NSKeyedUnarchiver unarchiveObjectWithFile:detailPath];
NSLog(@"APP get animal type:%@", getAnimal.animalType);
} else{
NSLog(@"save object fail!");
}
执行结果:
2014-01-03 19:12:22.144 Objc[696:c07] save object success!
2014-01-03 19:12:25.601 Objc[696:c07] APP get animal type: big fat sheep
我执行后,也检查过了animal.txt文本内容,发现系乱码。。
bplist00‘T$topX$objectsX$versionY$archiver—Trootħ
U$null“
V$classTtypeÄÄ_ big fat sheep “X$classesZ$classname¢XLQAnimalXNSObjectXLQAnimal܆_NSKeyedArchiver(:<AGLSXZ\ns|áäìú•™º
这种模式只适合少量配置数据的存储。优点就系够简单。起码比sqlite简单很多。
ios专题 -归档保存数据的更多相关文章
- IOS四种保存数据的方式
在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeyed ...
- IOS 四种保存数据的方式
在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeyed ...
- iOS 写入文件保存数据的方式
在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeye ...
- iOS学习之应用数据存储1-属性列表、偏好设置、NSKeyedArchiver归档
iOS应用数据存储的常用方式(持久化方式) 属性列表(plist)归档(XML文件) Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core ...
- iOS Swift3.0 OC 数据储存--归档
一.Swift 3.0 1.model class userModel: NSObject,NSCoding { var account: String = "" var regm ...
- iOS保存数据的4种方式
在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeyed ...
- iOS中归档对象的创建,数据写入与读取
归档(archiving)是指另一种形式的序列化,但它是任何对象都可以实现的更常规的模型.专门编写用于保存数据的任何模型对象都应该支持归档.比属性列表多了很良好的伸缩性,因为无论添加多少对象,将这些对 ...
- UI:归档、反归档、数据持久化
支持的文件读写类型:字符串.数组.字典.NSdata (可变的.不可变的.共有8个类) 对于数组.字典在写入文件时,其中的元素也必须是以上四种类型之一. 支持的数据类型有限.且简单 写入文件: 字符 ...
- iOS开发网络篇—数据缓存
iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...
随机推荐
- Legal or Not
Legal or Not Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total ...
- Android 自定义View可拖动移动位置及边缘拉伸放大缩小
一.首先说一下定义这样一个View有什么用?在一些app中,需要设置头像,而用户选择的图片可能是使用摄像头拍摄,也可能是选择的相册里面的图片,总之,这样的图片大小不一,就比如在使用某个聊天软件的时候, ...
- phpDesigner 工具快捷键巧用
Zend Studio工具默认的快捷方式, 如果你从事php工作, 自然能够体会到一些便利性, 比如CTRL+D, 可以直接复制当前一行, 这对于重复代码及调试都有很大帮助. Ctrl+U转换大小写之 ...
- java使用batik转换svg文件
svg是一种矢量图片格式,用来保存高保真的图片.我们可以用编辑器打开svg,我们可以看到svg文件其实就是一个xml文件,这种文件浏览器也可以识别.因此要查看svg用现成的浏览器就可以了.值得庆幸的是 ...
- Linux下多任务间通信和同步-信号
Linux下多任务间通信和同步-信号 嵌入式开发交流群280352802,欢迎加入! 1.概述 信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式.信号可以直接进行用户空间进程和内核进程之间的 ...
- IT工作中工资最高和增长最快的是什么
Staff在博客IT Jobs with the Highest Pay and Fastest Growth中画了个图说明IT工作中工资最高和增长最快的是什么.
- JMeter入门(3):录制JMeter脚本
一般自己手动的设置JMeter会比较麻烦,如果一边操作页面,提交表单,一边能够自动生成JMeter的脚本,则非常方便: BadBoy:录制JMeter脚本: Donwload URL:http://w ...
- Android开发_后台任务task管理_allowTaskReparenting alwaysRetainTaskState clearTaskOn
1.android:allowTaskReparenting 这个属性用来标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task,“tru ...
- [Javascript] IIFE
Javascript modules are a design pattern that allow you to encapsulate your code into smaller self ma ...
- OpenJDK和Sun/OracleJDK 区别 与联系
首先要先明确之间,以及OpenJDK 6.OpenJDK 7.OpenJDK 7u和OpenJDK 8等项目之间是什么关系,这有助于确定接下来编译要使用的JDK版本和源码分支.从前面介绍的Java发展 ...