在APP中,如果没有做缓存,一旦没有网络,展示界面时,可能会无法使用,有些界面无法展示。
如果做缓存,还可以每次加载数据前,先加载本地数据,再请求,如果请求成功,就刷新数据;没有再展示旧数据。而且能加上数据的更新时间,后台就能判断是否返回数据,减小服务器压力。
由于是简化版,所以就直接上代码了
//
// JCDataCache.h
// CacheTest
//
// Created by Jin on 2018/7/6.
// Copyright © 2018年 金城. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface JCDataCache : NSObject
+(instancetype)getInstance;
/**
缓存数据
@param url 网络数据url
@param jsonDict 请求成功后返回的数据
@return 是否存储成功
*/
+(BOOL)saveDataUrl:(NSString *)url jsonDict:(NSDictionary *)jsonDict;
/**
获取缓存的数据
@param url 网络数据url
@return 缓存的数据
*/
+(NSDictionary *)getData:(NSString *)url;
@end
//
// JCDataCache.m
// CacheTest
//
// Created by Jin on 2018/7/6.
// Copyright © 2018年 金城. All rights reserved.
//
#import "JCDataCache.h"
@implementation JCDataCache
//缓存数据
+(BOOL)saveDataUrl:(NSString *)url jsonDict:(NSDictionary *)jsonDict{
NSString *configFile = [self getPath:url];
BOOL isSucces = [jsonDict writeToFile:configFile atomically:YES];
return isSucces;
}
//获取缓存的数据
+(NSDictionary *)getData:(NSString *)url{
NSString *configFile = [self getPath:url];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:configFile];
return dict;
}
//生成文件路径
+(NSString *)getPath:(NSString *)url{
NSFileManager *fileManager = [[NSFileManager alloc]init];
NSString *pathDocuments = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString *createPath = [pathDocuments stringByAppendingPathComponent:@"UserData"];
if (![[NSFileManager defaultManager] fileExistsAtPath:createPath]) {
[fileManager createDirectoryAtPath:createPath withIntermediateDirectories:YES attributes:nil error:nil];
}
//创建文件
NSString *tempStrUrl = [url stringByReplacingOccurrencesOfString:@"." withString:@""];//去掉“”
tempStrUrl = [tempStrUrl stringByReplacingOccurrencesOfString:@"/" withString:@""];//去掉"/"
NSString *configFile = [createPath stringByAppendingPathComponent:tempStrUrl];
return configFile;
}
@end