六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 450|回复: 0

iPhone应用开发之模型对象归档

[复制链接]

升级  78.6%

856

主题

856

主题

856

主题

探花

Rank: 6Rank: 6

积分
2572
 楼主| 发表于 2013-2-4 02:29:39 | 显示全部楼层 |阅读模式
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];         
  • }
小结:iPhone应用开发之模型对象归档的内容介绍完了,希望通过本文对你有所帮助!
【编辑推荐】
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表