///让model遵守协议#define kactivityNum @"activityNum"
#define kalsoNeedKll @"alsoNeedKll"
@interface UserModel () <</span>NSCoding>
@end
添加代理的方法并且实现- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self == [superinit]) {
self.activityNum = [aDecoder decodeObjectForKey:kactivityNum];
self.alsoNeedKll = [aDecoder decodeObjectForKey:kalsoNeedKll];
。。。。。。。。。。。
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.activityNum forKey:kactivityNum];
[aCoder encodeObject:self.alsoNeedKll forKey:kalsoNeedKll];
。。。。。。。。。。。
}
///归档
//需要用NSMutableData来中中介
NSMutableData *data = [[NSMutableData alloc] init];
//创建归档辅助类
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
//编码
[archiverencodeObject:userforKey:@"user"];
//结束编码
[archiverfinishEncoding];
//写入
[data writeToFile:[self getFilePathWithModelKey:@"model"] atomically:YES];
///解档
NSData *_data = [[NSData alloc] initWithContentsOfFile:[self getFilePathWithModelKey:@"model"]];
//解档辅助类
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:_data];
//解档出数据模型Student
//解码并解档出model
UserModel *mStudent = [unarchiver decodeObjectForKey:@"user"];
//关闭解档
[unarchiverfinishDecoding];
//得到Document目录
-(NSString *) getFilePathWithModelKey:(NSString *)modelkey
{
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
return [[array objectAtIndex:0] stringByAppendingPathComponent:modelkey];
}
注:
这里的"model"是我们创建的归档文件的文件名
这里的"user"是我们在"model"中的一个map的key值,这里需要注意区分
- 欢迎各位一块学习,提高逼格!
也可以添加洲洲哥的微信公众号
更多消息
更多信iOS开发信息 请以关注洲洲哥 的微信公众号,不定期有干货推送:
iOS中实现归档和反归档
于 2015-11-02 10:12:33 首次发布