iOSのNSUserDefaultカスタムモデルのストレージについて

1648 ワード

開発では、辞書やモデルである可能性のあるデータを格納することがよくあります.辞書を格納する必要がある場合は、アーカイブ操作で直接格納することができます.
しかし、モデルを格納する必要がある場合は、アーカイブメソッドを直接使用してストレージを実現することはできません.このとき,プロトコルを遵守することによってオブジェクトの符号化と復号化の動作を行うことができる.
具体的には以下の通りです.
#import 
 
@interface Model : NSObject
 
 
@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