这里的归档主要是用于自定义类的归档和解档。我们这里使用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 数据存储 - 归档和解归档的更多相关文章

  1. iOS数据存储之对象归档

    iOS数据存储之对象归档 对象归档 对象归档是iOS中数据持久化的一种方式. 归档是指另一种形式的序列化,但它是任何对象都可以实现的更常规的类型.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文 ...

  2. IOS 数据存储(NSKeyedArchiver 归档篇)

    什么是归档 当遇到有结构有组织的数据时,比如字典,数组,自定义的对象等在存储时需要转换为字节流NSData类型数据,再通过写入文件来进行存储. 归档的作用 之前将数据存储到本地,只能是字符串.数组.字 ...

  3. iOS:文件归档和解归档的详解和使用

    文件归档和解归档: 用途: 所谓文件归档,就是把需要存储的对象数据存储到沙盒的Documents目录下的文件中,即存储到了磁盘上,实现数据的持久性存储和备份.解归档,就是从磁盘上读取该文件下的数据,用 ...

  4. swift 之归档和解归档

    swift 之归档和解归档 数据持久化的方式有很多种,归档是其中的一种,说起数据持久化的方式,iOS 中基本有以下几种方式:sqlite存储.coredata存储.UserDefault存储.归档.p ...

  5. iOS数据存储之属性列表理解

    iOS数据存储之属性列表理解 数据存储简介 数据存储,即数据持久化,是指以何种方式保存应用程序的数据. 我的理解是,开发了一款应用之后,应用在内存中运行时会产生很多数据,这些数据在程序运行时和程序一起 ...

  6. iOS数据存储类型 及 堆(heap)和栈(stack)

    iOS数据存储类型 及 堆(heap)和栈(stack) 一般认为在c中分为这几个存储区: 1栈 --  由编译器自动分配释放. 2堆 --  一般由程序员分配释放,若程序员不释放,程序结束时可能由O ...

  7. 【IPHONE开发-OBJECTC入门学习】对象的归档和解归档

    转自:http://blog.csdn.net/java886o/article/details/9046967 #import <Foundation/Foundation.h> #im ...

  8. ios数据存储——对象归档

    归档:数据从内存与闪存相互转化,类似“序列化”,将数据转换成二进制字节数据 操作:有两种方式,第一种是单个对象作为root进行归档和恢复,一个对象一个文件:第二种,可以同时归档多个对象到一个文件 注意 ...

  9. IOS数据存储之Sqlite数据库

    前言: 之前学习了数据存储的NSUserDefaults,归档和解档,沙盒文件存储,但是对于数据量比较大,需要频繁查询,删除,更新等操作的时候无论从效率上还是性能上,上述三种明显不能满足我们的日常开发 ...

随机推荐

  1. python join与split函数的用法举例

    python join 和 split方法: join用来连接字符串,split恰好相反,拆分字符串的. 来看有关join.split方法的例子 1,join用法的例子 复制代码 代码示例: > ...

  2. 文件/文件夹比较工具 beyond compare 3.3.10

  3. ORACLE 事务学习

    以下内容为本人的学习手记,有不足和理解错误的地方,请谨慎参考. 在ORACLE中的事务并不像MSSQL中的事务那样可以随意控制. ORACLE的事务是在进行数据第一次被修改后自动开启的无法显示的开启事 ...

  4. Android MVC模式

    Android MVC模式 下面是我对Android MVC模式的理解 Model 模型层 包括实体模型层,存放程序中调用的实体. 业务模型层,存放程序中调用的业务逻辑.   View 显示层  An ...

  5. startActivityForResult用法详解

    一.如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int requestCode ...

  6. Struts2 - 常用的constant总结

    见注释 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC &quo ...

  7. RDO部署openstack(1)

    1. 安装系统CentOS 6.5   2. 网络配置   Eth0 设置 # cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ON ...

  8. Avant Browser

    Avant Browser Avant 浏览器友好的用户界面为你的网络冲浪带来全新的效率和透明性.软件版本的不断升级使产品的可靠性稳步提高. 没有广告.没有恶意软件! Avant 浏览器是免费的.10 ...

  9. Linux下查看进程打开的文件句柄数和如何修改

    修改文件句柄数在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面).系统默认值1024. 对于一般的应用来说(象Apache.系统进 ...

  10. 我的Android最佳实践之—— 解决闪空界面问题

    进入应用时,由于应用的启动Activity都会有默认的theme,所以会跳一下原始界面,才启动我们定义的theme. 修改这个问题的方法,就是给应用启动的Activity设置一个空的theme.如下面 ...