首先我们创建一个WKUser类,来保存用户的基本信息。
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface WKUser : NSObject<NSCoding>
@property (nonatomic,strong) NSString *name;
@property (nonatomic,strong) NSString *age;
@property (nonatomic,strong) UIImage *headImage;
@end
我们遵守NSCoding协议,然后在.m文件实现。
#import "WKUser.h"
@implementation WKUser
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
self = [super init];
if (self) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeObjectForKey:@"age"];
self.headImage = [UIImage imageWithData:[aDecoder decodeObjectForKey:@"headImage"]];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.age forKey:@"age"];
[aCoder encodeObject:UIImageJPEGRepresentation(self.headImage, 1.0) forKey:@"headImage"];
}
@end
在controller中,我们进行归档解档的操作。
NSLog(@"%@",NSHomeDirectory());
NSArray *codepath= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * _storagePath = [codepath[0] stringByAppendingPathComponent:@"user.plist"];
//单个存档
WKUser *user = [[WKUser alloc] init];
user.headImage = [UIImage imageNamed:@"cat.jpg"];
user.name = @"wiki";
user.age = @"24";
if ([NSKeyedArchiver archiveRootObject:user toFile:_storagePath]) {
NSLog(@"存档成功");
}else{
NSLog(@"存档失败");
}
//单个解档
WKUser *myself = [NSKeyedUnarchiver unarchiveObjectWithFile:_storagePath];
NSLog(@"%@~~%@~~~%@",myself.name,myself.age,myself.headImage);
/*
也可以把所有的WKUser组成一个数组,作为整体进行存档解档。
缺点:以这种方式保存数据只能一次性归档保存以及一次性解档。数据较少的时候使用很方便。
数据量过多的时候,如果想修改其中的某一条、解压整个数据然后归档整个数据还是比较耗时的。
*/