最近一直做本地存储的问题,是写入到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];
}
网友评论