IOS中归档和反归档操作<代码演示>

来源:互联网 发布:淘宝客推广如何设置 编辑:程序博客网 时间:2024/06/10 19:36
//归档操作


#import <Foundation/Foundation.h>
//实现自定义类的归档和反归档操作
//如需当期自动类可完成归档操作,必须遵守NSCoding协议,并实现协议中的编码和解码方法
//encodeWithCoder-->编码和initWithCoder-->解码
@interface contactItem : NSObject<NSCoding]]]]>

@property (nonatomic,retainNSString *contactName;
@property (nonatomic,retainNSString *contactPhone;
@property (nonatomic,retainNSString *contactGender;

@end#import "contactItem.h"



@implementation contactItem

#pragma mark --NSCoding Methods--
-(void)encodeWithCoder:(NSCoder *)aCoder{
    
    
//通过aCoder对自定义类属性的实例对象属性进行编码操作
    [aCoder 
encodeObject:_contactName forKey:@"contactName"];
    [aCoder 
encodeObject:_contactPhone forKey:@"contactPhone"];
    [aCoder 
encodeObject:_contactGender forKey:@"contactGender"];
    
}

-(
id)initWithCoder:(NSCoder *)aDecoder{
    
    
//根据aDecoder做解码操作,解码返回的对象由属性的实例对象接收
    
_contactName = [aDecoder decodeObjectForKey:@"contactName"];
    
_contactPhone = [aDecoder decodeObjectForKey:@"contactPhone"];
    
_contactGender = [aDecoder decodeObjectForKey:@"contactGender"];

    
return self;
}

@end




——归档

   //实例化
    
contactItem *anyItem = [[contactItem allocinit];
    [anyItem 
setContactName:@"姜子牙"];
    [anyItem 
setContactPhone:@"12345678"];
    [anyItem 
setContactGender:@""];
    
    
NSString *archiverPath = [documentPath stringByAppendingPathComponent:@"contactItem.archiver"];
    
//对自定义类型的实例对象做归档操作
    
NSMutableData *datas = [NSMutableData data];
    
//编码并写入NSMutable
    
NSKeyedArchiver *keyArchiver = [[NSKeyedArchiver allocinitForWritingWithMutableData:datas];
    [keyArchiver 
encodeObject:anyItem forKey:@"contactItem"];
    
//完成编码,即完成归档操作
    //只有为归档对象发送finishEncoding消息,才能为对象完成编码操作,并将编码完成后的二进制数据流写入到上面提供的NSMutableData类型的对象中
    [keyArchiver 
finishEncoding];
    
//将编码完成的二进制数据写入到指定的路径下文件中,实现持久化
    [datas 
writeToFile:archiverPath atomically:YES];
    


//反归档操作


    //实现反归档操作-步骤
    
/*
     1.
得到要归档文件存储位置
     2.
将其实例化为NSData类型实例对象
     3.
NSKeyUnarchiver类型的实例对象做反归档操作
     4.
再转化为指定类型的自定义类型对象,并接收各个属性
     
     */

    
    
//1.得到要归档文件存储位置
    
NSString *archiverPath =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectoryNSUserDomainMaskYESobjectAtIndex:0];
    
NSString *realPath = [archiverPath stringByAppendingPathComponent:@"contactItem.archiver"];
    
//2.将其实例化为NSData类型实例对象
    
NSData *datas = [NSData dataWithContentsOfFile:realPath];
    
//3.NSKeyUnarchiver类型的实例对象做反归档操作
    
NSKeyedUnarchiver *keyUnarchiver = [[NSKeyedUnarchiver allocinitForReadingWithData:datas];
    
//4.再转化为指定类型的自定义类型对象,并接收各个属性
    
contactItem *oneItem = [keyUnarchiver decodeObjectForKey:@"contactItem"];
    
 //发送完成解码消息
    [keyUnarchiver 
finishDecoding];
    
NSLog(@"反归档后数据%@",[oneItem description]);



0 0
原创粉丝点击