nskeyedunarchiverarchiver 可以存到数据库吗

NSKeyedArchiver归档和plist文件存储不同的是NSKeyedArchiver可以直接保存对象。如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复。不是所有的对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以被存储。
NSCoding协议中的2个方法:
(1)encodeWithCoder:
存对象时该方法必须实现,每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey:方法归档实例变量。即指定存储哪些属性和在文件中以什么名字作为key存储这些属性。例如:
[encode& encodeObject:_name& forKey:@&name&];
系统下次从文件中取_name的值就自动用name这个key去取,后面再通过initWithCoder方法把取出的值赋值给_name。类似地:
[encode& encodeInt:_age& forKey:@&age&];
(2)initWithCoder:
取对象时该方法必须实现,每次从文件中恢复(解码)对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用decodeObjectForKey方法解码实例变量。即指定读取文件中哪个东西变成属性。例如:
-(id)initWithCoder:NSCoder *)decoder
if(self = [super init]){
& _name = [decoder decodeObjectForKey:@&name&];
2、归档NSArray
归档一个NSArray对象到Documents/array.archive:
其中扩展名可以任意写,不写也可以。
NSArray *array = [NSArray arrayWithObjects:@&a&,@&b&,nil];
[NSKeyedArchiver archiveRootObject:array toFile:path];
归档成功将如下图:
3、恢复(解码)NSArray对象
4、归档对象的注意
如果父类也遵守了NSCoding协议,请注意:
(1)应该在encodeWithCoder:方法中加上一句
[super encodeWithCode:encode];
确保继承的实例变量也能被编码,即也能被归档
(2)应该在initWithCoder:方法中加上一句
self = [super initWithCoder:decoder];
确保继承的实例变量也能被解码,即也能被恢复
阅读(...) 评论()IOS数据持久化之归档NSKeyedArchiver(烟台杰瑞教育原创)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
IOS数据持久化之归档NSKeyedArchiver(烟台杰瑞教育原创)
烟台杰瑞教育科技有限公司(简称杰瑞教育)...|
总评分0.0|
&&IOS数据持久化之归档NSKeyedArchiver
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢19388人阅读
iOS(151)
& & & & &基本的数据类型如NSString、NSDictionary、NSArray、NSData、NSNumber等可以用属性列表的方法持久化到.plist 文件中,但如果是一些自定义的类的话,属性列表的方法就不管用了。archiver 方法可以做到。
编码如下:
& & &首先新建一个person类,定义它的三个属性,如下:
数据持久化之archiver
Created by Rio.King on 13-9-22.
Copyright (c) 2013年 Rio.King. All rights reserved.
#import &UIKit/UIKit.h&
@interface person : UIView&NSCoding&
@property(nonatomic, assign)
@property(nonatomic, copy)NSString *
@property(nonatomic, assign)
数据持久化之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&];
-(NSString *)description{
return [NSString stringWithFormat:@&name = %@, age = %d, height = %f&,self.name,self.age,self.height];
//释放资源
-(void)dealloc{
[super dealloc];
[_name release];
然后再ViewController.m文件中写如下代码:
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 ()
@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);
,,在写ViewController.m文件代码的时候,必须在头文件中遵循NSCoding协议。
#import &UIKit/UIKit.h&
@interface ViewController : UIViewController&NSCoding&
运行结果如下:
13:31:39.509 数据持久化之archiver[1080:c07] name = Rio, age = 20, height = 1.750000
注意事项:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1203995次
积分:12143
积分:12143
排名:第1220名
原创:169篇
转载:153篇
评论:109条

我要回帖

更多关于 nskeyedarchiver 简书 的文章

 

随机推荐