自定义数据类型的序列化

来源:互联网 发布:成都历史气象数据查询 编辑:程序博客网 时间:2024/06/05 17:51

1、为自定义数据类型添加 NSCoding 协议,实现该协议的接口

- (void)encodeWithCoder:(NSCoder *)aCoder;- (id)initWithCoder:(NSCoder *)aDecoder;

2、序列化对象的属性

id 类型的属性直接用  aCoder encodeObject: forKey: 序列化;

基础数值类型要用 NSNumber 封装后再进行序列化。

- (void)encodeWithCoder:(NSCoder *)aCoder{    [aCoder encodeObject:self.regionName forKey:@"regionName"];    NSNumber *lon = [NSNumber numberWithDouble:self.location.longitude];    NSNumber *lat = [NSNumber numberWithDouble:self.location.latitude];    [aCoder encodeObject:lon forKey:@"regionLon"];    [aCoder encodeObject:lat forKey:@"regionLat"];}

3、反序列化对象的属性

使用 aDecoder decodeObjectForKey: 反序列化类型属性。

- (id)initWithCoder:(NSCoder *)aDecoder{    self = [super init];    if (self)    {        self.regionName = [aDecoder decodeObjectForKey:@"regionName"];        NSNumber *lon = [aDecoder decodeObjectForKey:@"regionLon"];        NSNumber *lat = [aDecoder decodeObjectForKey:@"regionLat"];                CLLocationCoordinate2D location;        location.longitude = [lon doubleValue];        location.latitude = [lat doubleValue];        self.location = location;    }    return self;}


4、使用序列化方法

// 对象序列化成文件时保存的路径#define FileSavePath    ([NSHomeDirectory() stringByAppendingPathComponent:@"RegionList.plist"])

序列化对象到文件

[NSKeyedArchiver archiveRootObject:objectID toFile:path];

从文件中反序列化数据到对象

id obj = [NSKeyedUnarchiver unarchiveObjectWithFile:path];



0 0
原创粉丝点击