第十七篇、归档缓存模型

简介:

  在很多的情况下,我们常常需要去缓存模型数据,比如一下简单的数据(个人信息等)。

注意:

  1.必须需要NSCoding协议

 

存盘示例:

.h

#import <Foundation/Foundation.h>

@interface LocalData : NSObject

+ (instancetype)read:(NSString *)name;
+ (void)save:(NSString *)name className:(id)className;

@end

 

.m

#import "LocalData.h"

@implementation LocalData

+ (instancetype)read:(NSString *)name {
//    NSData *_data = [[NSData alloc] initWithContentsOfFile:[self getFilePathWithModelKey:name]];
//    //解档辅助类
//    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:_data];
//    //解档出数据模型Student
//    //解码并解档出model
//    id model = [unarchiver decodeObjectForKey:name];
//    //关闭解档
//    [unarchiver finishDecoding];
//    return model;
    
    //获得保存数据
    NSData *getthemeAndAboutData = [[NSUserDefaults standardUserDefaults] objectForKey:name];
    //转成模型获取数据
    id model =   [NSKeyedUnarchiver unarchiveObjectWithData:getthemeAndAboutData];
    
    return model;

    
    //return [NSKeyedUnarchiver unarchiveObjectWithFile:[self getFilePathWithModelKey:name]];
}

+ (void)save:(NSString *)name className:(id)className
{

//    BOOL success = [NSKeyedArchiver archiveRootObject:className toFile:[self getFilePathWithModelKey:name]];
//    NSLog(@"保存的状态%d",success);
    
    ///////////////////////归档
//    //需要用NSMutableData来中中介
//    NSMutableData *data = [[NSMutableData alloc] init];
//    //创建归档辅助类
//    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
//    //编码
//    [archiver encodeObject:className forKey:name];
//    //结束编码
//    [archiver finishEncoding];
//    //写入
//    [data writeToFile:[self getFilePathWithModelKey:name] atomically:YES];
    
    
    NSData *themeAndAboutData = [NSKeyedArchiver archivedDataWithRootObject:className];
    [[NSUserDefaults standardUserDefaults] setObject:themeAndAboutData forKey:name];
    [[NSUserDefaults standardUserDefaults] synchronize];
    
}

//得到目录
+(NSString *) getFilePathWithModelKey:(NSString *)modelkey
{
    NSArray *array =  NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    return [[array objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.archiver",modelkey]];
    
}

@end

 

posted on 2016-08-29 15:27  久冬不雨  阅读(155)  评论(0编辑  收藏  举报