对象归档:

1、对象归档的对象属性只能是简单的属性,对象的属性最好不要是自定义对象.较复杂的对象不适合归档。

2、对象如果父类非NSObject,父类也要实现归档解档方法。且子类的解档跟归档方法里要实现父类的归档解档。

3、对象归档后的文件后缀可以是任意后缀。

4、对象里面涉及的其他自定义对象,其也要实现归解档。

自定义对象的沙盒存储:

字典、数组等文件的存储用writetoFile方法。对象的存储用NSKeyedArchiver。

从沙盒中取出自定义对象,也用NSKeyedArchiver。

将对象存入沙盒,一定要重写对象类系统存档、解档方法:

@interface HCAccount

: NSObject

/**

*当一个对象要归档进沙盒中时,就会调用这个方法

*目的:在这个方法中说明这个对象的哪些属性要存进沙盒

*/

-

(void)encodeWithCoder:(NSCoder *)aCoder {

[aCoder encodeObject:self.access_tokenforKey:@"access_token"];

[aCoder encodeObject:self.expires_inforKey:@"expires_in"];

[aCoder encodeObject:self.uidforKey:@"uid"];

}

/**

*当从沙盒中解档一个对象时(从沙盒中加载一个对象时),就会调用这个方法

*目的:在这个方法中说明沙盒中的属性该怎么解析(需要取出哪些属性)

*/

-

(id)initWithCoder:(NSCoder *)aDecoder {

if (self = [super init]) {

self.access_token = [aDecoderdecodeObjectForKey:@"access_token"];

self.expires_in = [aDecoderdecodeObjectForKey:@"expires_in"];

self.uid = [aDecoderdecodeObjectForKey:@"uid"];

}

return self;

}

#define

HCAccountPath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,

NSUserDomainMask, YES) lastObject]

stringByAppendingPathComponent:@"account.archive"]

@implementation

HCAccountTool

//存储账号信息

+

(void)saveAccount:(HCAccount *)account{

//获得账号存储时间(accessToken的产生时间)

account.created_time = [NSDate date];

//自定义对象的存储必须用NSKeyedArchiver

[NSKeyedArchiver archiveRootObject:accounttoFile:HCAccountPath];

}

//返回账号信息

+ (HCAccount

*)account{

//获取模型

HCAccount *account = [NSKeyedUnarchiverunarchiveObjectWithFile:HCAccountPath];

实现父类归解档:

/**

*  当一个对象要归档进沙盒中时,就会调用这个方法

*  目的:在这个方法中说明这个对象的哪些属性要存进沙盒

*/

- (void)encodeWithCoder:(NSCoder *)aCoder {

[super encodeWithCoder:aCoder];

[aCoder encodeObject:self.Name forKey:@"Name"];

[aCoder encodeObject:self.Code forKey:@"Code"];

}

/**

*  当从沙盒中解档一个对象时(从沙盒中加载一个对象时),就会调用这个方法

*  目的:在这个方法中说明沙盒中的属性该怎么解析(需要取出哪些属性)

*/

- (id)initWithCoder:(NSCoder *)aDecoder {

if (self = [super initWithCoder:aDecoder]) {

self.Name = [aDecoder decodeObjectForKey:@"Name"];

self.Code = [aDecoder decodeObjectForKey:@"Code"];

}

return self;

}

你可能感兴趣的:(对象归档:)