iOS 数据存储 - 归档和解归档
这里的归档主要是用于自定义类的归档和解档。我们这里使用NSKeyedArchiver和NSKeyedUnarchiver来归档和解档。
注意:自己定义的类需要实现<NSCoding>,如:@interface User : NSObject <NSCoding>,并实现Coding中相应的方法。
/*************************************User.h*************************************/
//
// User.h
// customContentArchiveDemo
//
// Created by Warrior on 14-1-7.
// Copyright (c) 2014年 Warrior. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface User : NSObject <NSCoding>
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *email;
@property(nonatomic,copy)NSString *passWord;
@property(nonatomic,assign)int age;
@end
/*************************************User.m*************************************/
//
// User.m
// customContentArchiveDemo
//
// Created by Warrior on 14-1-7.
// Copyright (c) 2014年 Warrior. All rights reserved.
//
#import “User.h”
#define NAME @“name”
#define EMAIL @“email”
#define PASSWORD @“passWord”
#define AGE @“age”
@implementation User
@synthesize name;
@synthesize email;
@synthesize passWord;
@synthesize age;
//对属性解码,解档的时候调用
- (id)initWithCoder:(NSCoder *)aDecoder
{
if(self = [super init])
{
//注意这里要添加self
name = [aDecoder decodeObjectForKey:NAME];
email = [aDecoder decodeObjectForKey:EMAIL];
passWord = [aDecoder decodeObjectForKey:PASSWORD];
age = [aDecoder decodeIntForKey:AGE];
}
return self;
}
//对属性编码,归档的时候调用
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:name forKey:NAME];
[aCoder encodeObject:email forKey:EMAIL];
[aCoder encodeObject:passWord forKey:PASSWORD];
[aCoder encodeInt:age forKey:AGE];
}
@end
使用归档和解档的方法来实现保存数据。
/*************************************main.m*************************************/
//
// main.m
// customContentArchiveDemo
//
// Created by Warrior on 14-1-7.
// Copyright (c) 2014年 Warrior. All rights reserved.
//
#import <Foundation/Foundation.h>
#import “User.h”
int main(int argc, const char * argv[])
{
@autoreleasepool {
//归档
NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@”user.archive”];
NSFileManager *fileManger = [NSFileManager defaultManager];
if(![fileManger fileExistsAtPath:filePath])
[fileManger createFileAtPath:filePath contents:nil attributes:nil];
User *user = [[User alloc] init];
user.name = @”Warrior Sun”;
user.email = @”suenihy@hotmail.com”;
user.passWord = @”123456”;
user.;
if([NSKeyedArchiver archiveRootObject:user toFile:filePath])
{
NSLog(@”归档成功”);
}
//解档
User *unUser = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
NSLog(@”User name:%@”, unUser.name);
}
;
}
—————————————————————————————————————————————————————————————
要保存基本数据类型,如int,NSString等,可以将user的变量修改为相应的基本类型变量。
iOS 数据存储 - 归档和解归档的更多相关文章
- iOS数据存储之对象归档
iOS数据存储之对象归档 对象归档 对象归档是iOS中数据持久化的一种方式. 归档是指另一种形式的序列化,但它是任何对象都可以实现的更常规的类型.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文 ...
- IOS 数据存储(NSKeyedArchiver 归档篇)
什么是归档 当遇到有结构有组织的数据时,比如字典,数组,自定义的对象等在存储时需要转换为字节流NSData类型数据,再通过写入文件来进行存储. 归档的作用 之前将数据存储到本地,只能是字符串.数组.字 ...
- iOS:文件归档和解归档的详解和使用
文件归档和解归档: 用途: 所谓文件归档,就是把需要存储的对象数据存储到沙盒的Documents目录下的文件中,即存储到了磁盘上,实现数据的持久性存储和备份.解归档,就是从磁盘上读取该文件下的数据,用 ...
- swift 之归档和解归档
swift 之归档和解归档 数据持久化的方式有很多种,归档是其中的一种,说起数据持久化的方式,iOS 中基本有以下几种方式:sqlite存储.coredata存储.UserDefault存储.归档.p ...
- iOS数据存储之属性列表理解
iOS数据存储之属性列表理解 数据存储简介 数据存储,即数据持久化,是指以何种方式保存应用程序的数据. 我的理解是,开发了一款应用之后,应用在内存中运行时会产生很多数据,这些数据在程序运行时和程序一起 ...
- iOS数据存储类型 及 堆(heap)和栈(stack)
iOS数据存储类型 及 堆(heap)和栈(stack) 一般认为在c中分为这几个存储区: 1栈 -- 由编译器自动分配释放. 2堆 -- 一般由程序员分配释放,若程序员不释放,程序结束时可能由O ...
- 【IPHONE开发-OBJECTC入门学习】对象的归档和解归档
转自:http://blog.csdn.net/java886o/article/details/9046967 #import <Foundation/Foundation.h> #im ...
- ios数据存储——对象归档
归档:数据从内存与闪存相互转化,类似“序列化”,将数据转换成二进制字节数据 操作:有两种方式,第一种是单个对象作为root进行归档和恢复,一个对象一个文件:第二种,可以同时归档多个对象到一个文件 注意 ...
- IOS数据存储之Sqlite数据库
前言: 之前学习了数据存储的NSUserDefaults,归档和解档,沙盒文件存储,但是对于数据量比较大,需要频繁查询,删除,更新等操作的时候无论从效率上还是性能上,上述三种明显不能满足我们的日常开发 ...
随机推荐
- fiddler filter 过滤css 图片等
找到 request header->Show only if yrl contains: REGEX:(?insx)/[^\?/]*\.(css|ico|jpg|png|gif|bmp|wav ...
- redis配置文件解析
Redis是一个简单高效的内存KV数据库,基本上下载源码make install,编译完成,然后进入src目录运行redis-server即可运行.就是因为这么简单往往有朋友直接运行,将没有密码的re ...
- sqlserver快照,启用基于行版本控制的隔离级别
在sqlserver标准的已提交读(read committed)隔离级别下,读写操作相互阻塞.未提交读(read uncommitted)虽然不会有这种阻塞,但是读操作可能会读到脏数据,这是大部分用 ...
- C#执行DOS命令(CMD命令)
在c#程序中,有时会用到调用cmd命令完成一些功能,于是在网上查到了如下方法,实现了c#执行DOS命令,并返回结果. //dosCommand Dos命令语句 publ ...
- phonegap 2.7 ios配置安装详细教程(2.9通用)
原地址:http://www.cnblogs.com/yansi/archive/2013/05/14/3078222.html 在移动开发日益激烈的情况下我也不得不硬着头皮尝试下新鲜的html5的a ...
- bzoj1536: [POI2005]Akc- Special Forces Manoeuvres
Description 在一次军事行动中有一批空降兵要降落在沙漠中拆除炸弹. 空降兵按照预定的顺序跳伞并降落到指定的位置.一旦降落他们便呆在原地不动了. 每个空降兵都有一个生存半径. 如果炸弹与他的距 ...
- Sublime Text 3 自定义配置快捷键
Settings-User: { "font_face": "Courier New", "font_size": 14.0, " ...
- visual studio 声明数组太大,导致栈溢出
在解释原因前我们先看一下一个由C/C++编译的程序占用的内存分为几个部分: 1.栈区(stack segment):由编译器自动分配释放,存放函数的参数的值,局部变量的值等.在Windows下,栈是向 ...
- 队列(Queue)--环形队列、优先队列和双向队列
1. 队列概述 队列和堆栈都是有序列表,属于抽象型数据类型(ADT),所有加入和删除的动作都发生在不同的两端,并符合First In, First Out(先进先出)的特性. 特性: ·FIFO ·拥 ...
- [JS]Javascript的this用法
转自:阮一峰 this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, function test(){ this.x = 1; } 随着 ...