iOS疯狂详解之复杂对象归档反归档
2015-09-15 13:20
561 查看
需求:对复杂对象进行归档 反归档
复杂对象:工程中 自定义的数据模型类 例如一个Person类
Person.h
//
// Person.m
// MySandBox
//
// Created by long on 15/9/15.
// Copyright (c) 2015年 WLong. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)dealloc
{
[_name release];
[super dealloc];
}
// 归档 进行编码
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInteger:self.age forKey:@"age"];
[aCoder encodeObject:self.data forKey:@"data"];
}
// 反归档 解码
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeIntegerForKey:@"age"];
self.data = [aDecoder decodeObjectForKey:@"data"];
}
return self;
}
@end
综述: 归档复杂对象时 需要遵守NSCoding协议 并实现起方法 对要归档的对象 进行编码
复杂对象:工程中 自定义的数据模型类 例如一个Person类
Person.h
// // Person.h // MySandBox // // Created by long on 15/9/15. // Copyright (c) 2015年 WLong. All rights reserved. // #import <Foundation/Foundation.h> @interface Person : NSObject<NSCoding> @property (nonatomic,retain) NSString *name; @property (nonatomic,assign) NSInteger age; @property (nonatomic,retain) NSData *data; @end
//
// Person.m
// MySandBox
//
// Created by long on 15/9/15.
// Copyright (c) 2015年 WLong. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)dealloc
{
[_name release];
[super dealloc];
}
// 归档 进行编码
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInteger:self.age forKey:@"age"];
[aCoder encodeObject:self.data forKey:@"data"];
}
// 反归档 解码
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeIntegerForKey:@"age"];
self.data = [aDecoder decodeObjectForKey:@"data"];
}
return self;
}
@end
// 归档复杂对象 - (void)archive { // 获取Documents文件路径 #define kDocumentsPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] Person *p = [[Person alloc] init]; p.name = @"wang"; p.age = 12; // UIImagePNGRepresentation([UIImage imageNamed:@"shen"]) // 将png图片 转化成data p.data = UIImagePNGRepresentation([UIImage imageNamed:@"shen"]); // 创建一个可变的DATA 进行对 复杂对象编码后的储存 NSMutableData *data = [NSMutableData data]; // 创建归档对象 NSKeyedArchiver *archive = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; // 进行归档 [archive encodeObject:p forKey:@"person"]; // 归档结束 [archive finishEncoding]; NSString *archivePath = [kDocumentsPath stringByAppendingPathComponent:@"savePerson"]; NSLog(@"%@",archivePath); // 写入归档文件 [data writeToFile:archivePath atomically:YES]; [p release]; [archive release]; } // 反归档 - (void)unarchive { NSString *archivePath = [kDocumentsPath stringByAppendingPathComponent:@"savePerson"]; // 按路径读取 归档的data文件 NSData *data = [NSData dataWithContentsOfFile:archivePath]; // 创建反归档对象 NSKeyedUnarchiver *aaa = [[NSKeyedUnarchiver alloc]initForReadingWithData:data]; // 取出归档的对象 Person *p = [aaa decodeObjectForKey:@"person"]; UIImage *image = [UIImage imageWithData:p.data]; NSLog(@"%@",p.name); }
综述: 归档复杂对象时 需要遵守NSCoding协议 并实现起方法 对要归档的对象 进行编码
相关文章推荐
- iOS开发之路--微博“更多”页面
- iOS开发之路--微博骨架搭建
- IOS开发代码分享之获取启动画面图片的string
- IOS开发之路--C语言数组和字符串
- IOS开发代码分享之用nstimer实现倒计时功能
- IOS开发代码分享之设置UISearchBar的背景颜色
- ios开发之环境搭建-01
- 在开发iOS程序时对日期处理的总结
- iOS开发——keychain的使用
- iOS Graphics Technologies iOS 图形技术
- iOS开发异常错误总结
- 福建省漳州市医院信息系统备份归档容灾系统采购项目
- 归档,SharePoint的好伙伴
- 问答:归档产品如何保障数据安全(上)
- 2012 ISTE国际教育行业技术大会
- 保险IT应用高峰论坛
- 参加微软全球合作伙伴大会
- MessageSolution参加第五届中国保险IT应用高峰论坛(保网)
- 学习Objective-C:入门手册
- iOS开发 简单实现视频音频的边下边播