对象归档 解档

来源:互联网 发布:英伟达掌机 知乎 编辑:程序博客网 时间:2024/05/16 07:29

首先为什么我们要实现对象的归档了?

 原因:有时候需要直接将对象存储 NSUserDefaults 或者plist文件中。


ActivityObj.h  实现NSCoding协议

@interface ActivityObj : NSObject<NSCoding>
@property (nonatomic, strong) NSURL         *activityImgUrl;    //活动海报@property (nonatomic, strong) NSString      *activityId;        //活动Id@property (nonatomic, strong) NSString      *activityName;      //活动名称@property (nonatomic, strong) NSURL         *activityLinkUrl;   //活动链接@end


ActivityObj,m  需要实现

encodeWithCoder  和 initWithCoder 方法

#import "ActivityObj.h"#define ACTIVITYIMG     @"activityImg"#define ACTIVITYID      @"activityId"#define ACTIVUTYNAME    @"activityName"@implementation ActivityObj- (id)initWithCoder:(NSCoder *)aDecoder{    self = [super init];    if(self != nil)    {        self.activityImgUrl = [aDecoder decodeObjectForKey:ACTIVITYIMG];        self.activityId     = [aDecoder decodeObjectForKey:ACTIVITYID];        self.activityName   = [aDecoder decodeObjectForKey:ACTIVUTYNAME];    }        return self;}- (void)encodeWithCoder:(NSCoder *)aCoder{    [aCoder encodeObject:self.activityImgUrl    forKey:ACTIVITYIMG];    [aCoder encodeObject:self.activityId        forKey:ACTIVITYID];    [aCoder encodeObject:self.activityName      forKey:ACTIVUTYNAME];}@end

将对象保存到NSUserDefaults中 需要把对象转成NSData类型

    NSUserDefaults *udf = [NSUserDefaults standardUserDefaults];    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:obj];     [udf setObject:data forKey:key];    [udf synchronize];

将对象从NSUserDefaults取出来

id obj = [[NSUserDefaults standardUserDefaults] objectForKey:key];if([obj isKindOfClass:[NSData class]]){  //如果保存的是对象,那么先取得NSData数据再转成对象,然后返回        return [NSKeyedUnarchiver unarchiveObjectWithData:obj];    }else{        return obj;    }

将对象存储到plist文件中方法类似都是将对象转成NSData进行存储





0 0
原创粉丝点击