IPhone之模型对象归档

归档指的是另一种型式的序列化,但它是任保对象都可以实现的更常规的类型。

  其作用为:进行数据的持久化保存。

  对象必须实现NSCodeing协议和NSCopying协议。






@interface FourLines : NSObject <NSCoding, NSCopying> {

NSString *field1;

NSString *field2;

NSString *field3;

NSString *field4;

}

@property (nonatomic, retain) NSString *field1;

@property (nonatomic, retain) NSString *field2;

@property (nonatomic, retain) NSString *field3;

@property (nonatomic, retain) NSString *field4;

@end
#pragma mark NSCoding

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

[encoder encodeObject:field1
forKey:kField1Key];

[encoder encodeObject:field2
forKey:kField2Key];

[encoder encodeObject:field3
forKey:kField3Key];

[encoder encodeObject:field4
forKey:kField4Key];

}

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

if (self = [super init]) {

self.field1 = [decoder
decodeObjectForKey:kField1Key];

self.field2 = [decoder
decodeObjectForKey:kField2Key];

self.field3 = [decoder
decodeObjectForKey:kField3Key];

self.field4 = [decoder
decodeObjectForKey:kField4Key];

}

return self;

}
#pragma mark NSCopying

- (id)copyWithZone:(NSZone *)zone {

FourLines *copy = [[[self class] allocWithZone:
zone] init];

copy.field1 = [[self.field1 copyWithZone:zone]
autorelease];

copy.field2 = [[self.field2 copyWithZone:zone]
autorelease];

copy.field3 = [[self.field3 copyWithZone:zone]
autorelease];

copy.field4 = [[self.field4 copyWithZone:zone]
autorelease];

return copy;

}

 

获取归档文件






- (NSString *)dataFilePath {

NSArray *paths =
NSSearchPathForDirectoriesInDomains( NSDocumentDirectory,
NSUserDomainMask, YES);

NSString *documentsDirectory = [paths
objectAtIndex:0];

return [documentsDirectory
stringByAppendingPathComponent:@"archive"];

}

 

对数据进行归档






FourLines *fourLines = [[FourLines alloc] init];

fourLines.field1 = field1.text;

fourLines.field2 = field2.text;

fourLines.field3 = field3.text;

fourLines.field4 = field4.text;

//对数据进行归档

NSMutableData *data = [[NSMutableData alloc]
init];

NSKeyedArchiver *archiver = [[NSKeyedArchiver
alloc] initForWritingWithMutableData:data];

[archiver encodeObject:fourLines
forKey:@"Data"];

[archiver finishEncoding];

[data writeToFile:[self dataFilePath]
atomically:YES];

[fourLines release];

[archiver release];

[data release];

 

获取归档数据





NSString *filePath = [self dataFilePath];

if ([[NSFileManager defaultManager]
fileExistsAtPath:filePath]) {

NSData *data =
[[NSMutableData alloc]

initWithContentsOfFile:[self
dataFilePath]];

NSKeyedUnarchiver
*unarchiver = [[NSKeyedUnarchiver alloc]

initForReadingWithData:data];

FourLines *fourLines =
[unarchiver decodeObjectForKey:@"Data"];

[unarchiver
finishDecoding];

field1.text =
fourLines.field1;

field2.text =
fourLines.field2;

field3.text =
fourLines.field3;

field4.text =
fourLines.field4;

[unarchiver
release];

[data
release];

}

时间: 2024-08-23 09:32:02

IPhone之模型对象归档的相关文章

iOS开发——数据持久化Swift篇&amp;模型对象归档

模型对象归档 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 6 7 @IBOutlet weak var textField: UITextField! 8 9 @IBAction func btnSave(sender: UIButton) { 10 var text = textField.text as NSString 11 var image = UIImage(named: "log") 12

iOS 对模型对象进行归档

归档是指一种形式的序列化,专门编写用于保存数据的任何对象都应该支持归档.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们. 只要在类中实现的每个属性都是标量或者都是遵循NSCoding协议的某个类的实例,你就可以对整个对象进行完全归档.大多数的Foundation和Cocoa Touch类 都遵NSCoding协议,所以对于有大多数类来说,归档不太难. 遵循NSCoding协议: NSCoding声明了两个方法, - (void)encodeWithCoder:(NS

IOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档

1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer)模拟器应用沙盒的根路径在: (apple是用户名, 8.0是模拟器版本)/Users/apple/Libra

OC学习16——对象归档

转载自  OC学习篇之---归档和解挡 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都是需要实现一个接口:Serializable,同样的OC中操作的对象也是需要实现一个协议的,后面会说到. 一.已有类型的归档和解档 首先来看一个简单的例子: 1 // 2 // main.m 3 // 33_ObjectToFile 4 // 5 // Created by jiangwei on

IOS-MJExtension一句话搞定对象归档

MJExtension很强大,几乎支持现有所有的模型.字典.json数据转换,而且效率非常高 以前写对象归档的时候,需要让这个对象实现NSCoding协议,而且要对每一个需要归档的属性做一些encode和decode操作,例如你之前的代码可能是这样子的 Person.h文件 #import "Person.h" @interface Person : NSObject <NSCoding> @property (nonatomic,copy) NSString *name;

IOS开发学习笔记027-UITableView 使用模型对象

1.模型对象 继续优化上一个程序 上一次用到字典,但是坏处多多.这里将这些数据封装到类中. 这就是MVC中得模型,模型就是数据的显示结构 新建一个类,添加几个属性和一个类方法用于快速返回对象 1 #import <Foundation/Foundation.h> 2 3 @interface Province : NSObject 4 // UI控件用weak 5 // nsstring 用copy 6 7 8 @property (nonatomic,copy) NSString *head

TP框架---Model模型层---做模型对象

TP框架----Model模型层---------------做模型对象 Model模型层是用来做什么的呢???? 主要是用来做操作数据库访问的. 也就说明TP框架自带了一种访问数据库的方式,使用的是Model模型. Model模型怎样使用呢??? 要使用Model模型层访问数据库的话,需要做配置,因为必须把数据库的一些参数配置好之后,才能连接,所以找到Config.php 配置文件,打开 这些是关于数据库的配置, 要把这些粘贴到config.php 进行修改. config.php配置文件(修

IOS中将字典转成模型对象

作为IOS开发初级者今天学习了 如何将plist数据字典转成 数据对象数组中 .有点像C#中解析xml数据 的过程. apps.plist的xml数据是这样的 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList

字典转模型对象

这里主要是说NSDictionary转模型对象的核心代码,和需要注意点. /*** *  从处理plist中的数据 并返回模型对象的数组 * *  @return  NSArray *apps; */-(NSArray *) apps{    if (_apps==nil) {        // 过去plist的全路径        NSString *path=[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil