自定义新的NSUserDefaults功能的文件

使用NSUserDefaults存储的一般是用户名、id等少量的重要信息,数据量过大的话并不太适合,过多的键值取值找起来很费劲。

对于一些必要持久化的数据,重复对象类型使用数据库,在下使用的是JKDBModel,工具对FMDB二次封装,实现了很多CoreData的功能。

今天主要是针对数据量大、读取操作有限而且仅要求存储一个对象的持久化情况。比如页面需要缓存请求结果方便下次展示、用户输入框比较多的页面需要下次打开时自动显示上次入记录。为了这个需求,特意写了一个鸡肋的小功能,存储一个单独的plist文件,防止与NSUserDefaults的值发生冲突,方便读写。

NSUserDefaults是在本地存储的一个plist文件记录数据,所以自己重写一个plist文件存入沙盒比较合适。

上代码:

  • 使用方法
    //需要读取的key
    NSString *keyStr;
    //需要写入的数据
    //如果是自定义类型可以用`MJExtension`工具先转换成字典
    id vObj;

    keyStr = @"value";
    vObj = @{@"value":@"这是这个页面要存储的数据"};

//使用方法
    //在使用对象文件中 存储
    kFDGSavePageVal(vObj);
    //根据key值读取某对象类名下的数据
    kFDGReadPageVal(keyStr);
  • 源代码

  • FDGUserDefaultsFile.h

#import 


///存储信息
#define kFDGSaveUser(userDic) [FDGUserDefaultsFile saveUserInfoInfo:(userDic)]
///读取信息
#define kFDGUserValue [FDGUserDefaultsFile userValue]
///存储子数据
#define kFDGSaveSubValue(userDic) [FDGUserDefaultsFile addValuewithDic:(userDic)]
///读取子数据
#define kFDGReadSubValue(keyStr) [FDGUserDefaultsFile readWithKey:keyStr]

///根据类名
///读取本页面数据
#define kFDGReadPageVal(keyStr) kFDGReadSubValue(NSStringFromClass(self.class))[keyStr]
///存储本页面数据
#define kFDGSavePageVal(vObj) kFDGSaveSubValue(@{NSStringFromClass(self.class):(vObj)})


@interface FDGUserDefaultsFile : NSObject
///存储全部用户数据
+ (void)saveUserInfoInfo:(NSDictionary *)json;
///读取全部用户数据
+ (NSDictionary *)userValue;

///存储子数据数据
+ (void)addValuewithDic:(NSDictionary *)dic;
///读取子数据数据
+ (id)readWithKey:(NSString *)key;
@end
  • FDGUserDefaultsFile.m
#import "FDGUserDefaultsFile.h"

@implementation FDGUserDefaultsFile
#pragma mark -
//缓存用户数据
+ (void)saveUserInfoInfo:(NSDictionary *)json {
    NSString *plistPath = [self homePath];
    [json writeToFile:plistPath atomically:YES];
}
//读取用户数据
+ (NSDictionary *)userValue {
    NSDictionary *dict=[NSDictionary dictionaryWithContentsOfFile:[self homePath]];

    return (dict && dict.count) ? dict : @{};
}
///存储
+ (void)addValuewithDic:(NSDictionary *)dic {
    if (!dic) {
        return;
    }
    NSMutableDictionary *mDic = [NSMutableDictionary dictionaryWithDictionary:[self userValue]];

    for (NSString *vKey in dic) {
        mDic[vKey] = dic[vKey];
    }
    [self saveUserInfoInfo:mDic];
}
///读取
+ (id)readWithKey:(NSString *)key {
    NSDictionary *dic = [self userValue];

    return dic[key];
}
+ (void)uiseridKeys {

}
//用户数据地址
+ (NSString *)homePath {
    NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *plistPath = [rootPath stringByAppendingPathComponent:@"FDGUserData.plist"];
    return plistPath;
}

@end

你可能感兴趣的:(ios-数据持久化)