在开发中,我们经常会存储一个数据,这个数据可能是一个字典或者模型,当我们需要存储一个字典的时候,我们可以直接用归档操作来存储。
但是当我们需要存储模型的时候,直接用归档方法,实现不了存储。这个时候我们可以通过遵守<NSCopying>协议来编码对象和解码对象操作。
具体如下:
#import <Foundation/Foundation.h>
@interface Model : NSObject<NSCoding>
@property (nonatomic, strong) NSString * name;
@property (nonatomic, strong) NSString * Class;
@end
//
// Model.m
// sfd
#import "Model.h"
@implementation Model
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.Class forKey:@"Class"];
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init]) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.Class = [aDecoder decodeObjectForKey:@"Class"];
}
return self;
}
@end
然后直接调用就可以了。
//
// ViewController.m
//
#import "ViewController.h"
#import "Model.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Model * model = [[Model alloc]init];
model.name = @"周杰伦";
model.Class = @"三年级二班";
NSData * data = [NSKeyedArchiver archivedDataWithRootObject:model];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"Test"];
NSData * data1 = [[NSUserDefaults standardUserDefaults] valueForKey:@"Test"];
Model * unmodel = [NSKeyedUnarchiver unarchiveObjectWithData:data1];
NSLog(@"%@",unmodel.name);
}
@end
网友评论