iOS数据存储到本地的几种方法

A,归档解档(多针对于模型或者数组,利用MJExtension)

1,先在model里的.m文件写上MJCodingImplementation

2,再进行模型归档:

#define APP_DOCUMENT                [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]

#define DocumentPath(path)          [APP_DOCUMENT stringByAppendingPathComponent:path]

 [NSKeyedArchiver archiveRootObject:模型或者数组 toFile:DocumentPath(@"freeOrderSelectedCar")];

3,解档

 NSString *file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"freeOrderSelectedCar"];

     模型或者数组  = [NSKeyedUnarchiver unarchiveObjectWithFile:file];

/* 实现下面的方法,说明哪些属性不需要归档和解档 */

+ (NSArray *)mj_ignoredCodingPropertyNames{

    return @[@"name"];

}

 

B,保存数组或字典到本地(json数据的,如果是模型,则用上面的归档)

1,   字典转成二进制数据存到本地

        NSData *resultData = [NSJSONSerialization dataWithJSONObject:字典或数组 options:NSJSONWritingPrettyPrinted error:nil];

        [resultData writeToFile:DocumentPath(@"areas.plist") atomically:YES];

2, 读取本地数据

   NSData *data = [NSData dataWithContentsOfFile:DocumentPath(@"areas.plist")];

//需要判断数据为nil情况,因为如果为nil则无法转成字典的

    if (!isEmpty(data)) {

        NSDictionary * resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];或

        NSArray * resultArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

    }

 

C,偏好设置(保存轻量级的数据)

 //从沙盒里面读取键“key”对应的内容“值”

[[NSUserDefaults standardUserDefaults] objectForKey:<#key#>];

//把内容"value"存入到沙盒,对应的键是“key”

[[NSUserDefaults standardUserDefaults] setObject:<#value#> forKey:<#key#>];

 //同步到沙盒;必须要写,不写会产生不可预测的Bug

  [[NSUserDefaults standardUserDefaults] synchronize];

 

D,链表(针对数据量大,且为Json格式)(如果数据十分重要不容缺失则最好采用链表存储)(采用STDBManager库,如果找不到这个库,可以留下联系方式。后面我会放到github上面

1,初始化数据库链表

- (instancetype)init

{

    self = [super init];

    if (self) {

        // 创建缓存数据库表

        [[STDatabaseManager sharedInstance] createTableWithName:TABLE_CACHE];

    }

    return self;

}

 

2,存储数据到链表(把json格式的数据存入的)

    if (!isEmpty(json)) {

        [[STDatabaseManager sharedInstance] putJsonObject:json withId:@“Key” intoTable:TABLE_CACHE];

    }

3,读取数据(如果需要模型或模型数组,可以拿到的json数据转为模型或模型数组)

NSObject* data = [[STDatabaseManager sharedInstance] getJsonObjectById:@“Key” fromTable:TABLE_CACHE];

 

posted on 2017-04-10 12:45  mantou811  阅读(2795)  评论(0编辑  收藏  举报

导航