美文网首页数据存储
本地储存写入到json文件

本地储存写入到json文件

作者: 如风而行 | 来源:发表于2016-11-15 09:55 被阅读1207次

    最近一直做本地存储的问题,是写入到json文件中,使用的时候在读取,不过如果数组中存储的是模型数据,这样可能会造成存储或者读取失败,在储存数组前,记得先遍历数组,然后模型转字典,再把字典存储到数组中,这样就OK了,下面我的代码是数组中存的字典,无需在转换了。

    不过使用writeToFile写入文件的时候,本次保存会把上次保存的数据给覆盖掉,不能累加,解决方法,可以使用归档存储,也可以换中思路,再次保存的时候,先读取上次保存的数据,然后一起写入这样就OK了。

    在适当的时候调用就可以了
    保存

    [self saveArrayandNSArray:self.dataDic andByAppendingPath:@"未盘.json"];
    

    读取

    NSMutableArray *weipan = [self readArrayByAppendingPath:@"未盘.json"];
    

    删除

     [self removeNSArrayByAppendingPaht:@"未盘.json"];
    
    
    #pragma mark - 读取本地数组
    - (NSMutableArray *)readArrayByAppendingPath:(NSString *)arrayName{
        // 拼接路径
        NSString * docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES) lastObject];
        NSString * fileName = [docDir stringByAppendingPathComponent:arrayName];
        NSData *jdata = [[NSData alloc] initWithContentsOfFile:fileName];
        if (jdata) {
            //反序列化
            NSArray *array = [NSJSONSerialization JSONObjectWithData:jdata options:0 error:NULL];    
            NSMutableArray *arrayDict=[NSMutableArray array];
            for (int i=0; i<array.count; i++) { 
                NSDictionary *dict=array[i];   
                [arrayDict addObject:dict];
            }
            return arrayDict;
        }else {
            NSLog(@"没有数据。。。");
            return nil;
        }
    }
    
    #pragma mark - 保存本地数组
    - (void)saveArrayandNSArray:(NSMutableArray *)array andByAppendingPath:(NSString *)name {
        //创建json文件 获取根目录
        NSString * docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES) lastObject];
        NSString * fileName = [docDir stringByAppendingPathComponent:name];
        if (array) {
            //字典转二进制
            NSData *dicData = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:nil];
            //二进制转字符串
            NSString *dataStr = [[NSString alloc] initWithData:dicData encoding:NSUTF8StringEncoding];  
            [dataStr writeToFile:fileName atomically:YES encoding:NSUTF8StringEncoding error:nil];
        }
    }
    
    
    
    #pragma mark - 删除本地数组
    - (void)removeNSArrayByAppendingPaht:(NSString *)arrayName { 
        NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES) lastObject];
        NSString * fileName = [docDir stringByAppendingPathComponent:arrayName];
        NSFileManager *manager=[NSFileManager defaultManager];
        [manager removeItemAtPath:fileName error:nil];
    }
    

    相关文章

      网友评论

        本文标题:本地储存写入到json文件

        本文链接:https://www.haomeiwen.com/subject/kzmkpttx.html