基本的数据类型如NSString、NSDictionary、NSArray、NSData、NSNumber等可以用属性列表的方法持久化到.plist 文件中,但如果是一些自定义的类的话,属性列表的方法就不管用了。archiver 方法可以做到。

编码如下:

首先新建一个person类,定义它的三个属性,如下:

[cpp] view plaincopyprint?

//

// person.h

// 数据持久化之archiver

//

// Created by Rio.King on 13-9-22.

// Copyright (c) 2013年 Rio.King. All rights reserved.

//

import <UIKit/UIKit.h>

@interface person : UIView

@property(nonatomic, assign) int age;

@property(nonatomic, copy)NSString *name;

@property(nonatomic, assign)float height;

@end

[cpp] view plaincopyprint?

//

// person.m

// 数据持久化之archiver

//

// Created by Rio.King on 13-9-22.

// Copyright (c) 2013年 Rio.King. All rights reserved.

//

import "person.h"

@implementation person

pragma mark 写入文件

-(void)encodeWithCoder:(NSCoder *)encoder{

[super encodeWithCoder:encoder];//不要忘了这个

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

[encoder encodeObject:self.name forKey:@"name"];

[encoder encodeFloat:self.height forKey:@"height"];

}

pragma mark 从文件中读取

-(id)initWithCoder:(NSCoder *)decoder{

self = [super initWithCoder:decoder];//不要忘了这个

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

self.name = [decoder decodeObjectForKey:@"name"];

self.height = [decoder decodeFloatForKey:@"height"];

return self;

}

-(NSString *)description{

return [NSString stringWithFormat:@"name = %@, age = %d, height = %f",self.name,self.age,self.height];

}

//释放资源

-(void)dealloc{

[super dealloc];

[_name release];

}

@end

然后再ViewController.m文件中写如下代码:

[cpp] view plaincopyprint?

//

// ViewController.m

// 数据持久化之archiver

//

// Created by Rio.King on 13-9-22.

// Copyright (c) 2013年 Rio.King. All rights reserved.

//

import "ViewController.h"

import "person.h"

@interface ViewController ()

@end

@implementation ViewController

  • (void)viewDidLoad

    {

    [super viewDidLoad];

    [self createPerson];

    [self readPerson];

    }

//创建

-(void)createPerson{

person *p = [[[person alloc] init] autorelease];
p.age = 20;
p.name = @"Rio";
p.height =1.75f; //获得Document的路径
NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [documents stringByAppendingPathComponent:@"person.archiver"];//拓展名可以自己随便取 [NSKeyedArchiver archiveRootObject:p toFile:path];

}

//读取

-(void)readPerson{

NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSString *path = [documents stringByAppendingPathComponent:@"person.archiver"];

person *person1 = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

NSLog(@"%@",person1);

}

@end

,,在写ViewController.m文件代码的时候,必须在头文件中遵循NSCoding协议。

[cpp] view plaincopyprint?

import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

运行结果如下:

2013-09-22 13:31:39.509 数据持久化之archiver[1080:c07] name = Rio, age = 20, height = 1.750000

数据持久化之NSKeyedArchiver的更多相关文章

  1. 数据持久化(一)--NSKeyedArchiver

    数据持久化:  将内存中的数据按某种格式存进磁盘 数据的种类: 1,结构化的数据 2, 字节流数据 结构化的数据        字节流 内存中结构化的数据   ->   磁盘,  叫: 归档 字 ...

  2. iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (plist.NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等 归档(又名 ...

  3. IOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (自定义的Property List .NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data ...

  4. Swift使用NSKeyedArchiver进行数据持久化保存的经验

    iOS提供了几种数据持久化保存的方法,有NSKeyedArchiver,Property List,NSUserDefaults和CoreData.我学习下来,觉得保存应用内的诸如列表,记录这些东西, ...

  5. IOS数据持久化之归档NSKeyedArchiver, NSUserDefaults,writeToFile

    //2.文件读写 //支持:NSString, NSArray , NSDictionay, NSData //注:集合(NSArray, NSDictionay)中得元素也必须是这四种类型, 才能够 ...

  6. iOS之数据持久化方案

    概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...

  7. iOS的数据持久化

    所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) pr ...

  8. iOS中的数据持久化方式

    iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data. 1.属性列表 涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults ...

  9. NSFileManager(沙盒文件管理)数据持久化 <序列化与反序列化>

    iOS应用程序只能在为该改程序创建的文件中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等.       默认情况下 ...

随机推荐

  1. Windows Azure Web Site (13) Azure Web Site备份

    <Windows Azure Platform 系列文章目录> 我们在使用Windows Azure Web Site的时候,经常会遇到需要对Web Site进行备份的情况.在这里笔者简单 ...

  2. JAVA 设计模式 代理模式

    用途 代理模式 (Proxy) 为其他对象提供一种代理以控制对这个对象的访问. 代理模式是一种结构型模式. 结构

  3. 功能齐全并且比较时髦的Jquery通用开源框架之【ejq.js】

    简介 ejq是一款非常小巧的JS工具库,未压缩才50K,在jquery的基础上对jquery缺失部分作了很好的弥补作用. 优点: 1.具有内置的模板解析引擎语法和angularjs相近减少学习成本 2 ...

  4. 记录一个mysql连接慢的问题

    问题现象是这样的: 我在一台机器上(61.183.23.23)启动了一个mysql,然后开通一个账号可以从127.0.0.1或者从61.183.23.23访问.但是遇到一个问题就是使用下面两个命令行访 ...

  5. Java进阶之reflection(反射机制)——反射概念与基础

    反射机制是Java动态性之一,而说到动态性首先得了解动态语言.那么何为动态语言? 一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见 ...

  6. Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串

    Problem Statement      The Happy Letter game is played as follows: At the beginning, several players ...

  7. .net概念之程序集说明

    一.程序集的一些基本概念: 程序集是包含一个或多个类型定义文件和资源文件的集合.它允许我们分离可重用类型的逻辑表示和物理表示. 程序集是一个可重用.可实施版本策略和安全策略的单元.它允许我们将类型和资 ...

  8. js中局部变量必须用var去声明

    js中的变量与其他的脚本语言都是很不一样的,在function中你如果不用var 声明一个变量,那么这个变量将在全局可见,也就相当于创建了全局变量.所以在function中声明变量尽量都是用var来声 ...

  9. 别误用IsDigit与IsNumber函数(转)

    1.起因 最近发现程序中有一段控制TextBox数字输入的代码,相信大家都不会太陌生,如下: void int_KeyPress(object sender, KeyPressEventArgs e) ...

  10. Rest.Ler PHP API Server解决方案

    https://github.com/Luracast/Restler 通过composer安装依赖后,整个vendor将近三十兆.这太不爽了.搞PHP的人如果没有洁癖的追求,跟搞Java的咸鱼有神码 ...