方案:
1.网络数据优先:每次都是从网络获取数据,如果没有网络,从本地获取。
2.本地数据优先:每次都是从本地获取,如果本地不存在,从网络获取。
3.智能模式,先从本地获取数据,然后加载,同时继承从服务器获取数据,当从服务器获取数据后,然后刷新加载服务器数据。
1.如何判断有没有网络?
需要用到Reachability第三方库,可以从GitHub上下载。导入库后
Reachability *reachability = [Reachability reachabilityWithHostName:@"http://www.baidu.com"];
//获取当前网络状态
NetworkStatus status = reachability.currentReachabilityStatus;
//没有网络
if (status == NotReachable)
{
//从本地读取
//刷新界面
NSLog(@"从数据库中获取");
}
//有网络
else
{
/**
* 请求网络数据
*/
NSLog(@"从网络获取");
}
2.永久数据保存方式:
1.NSUserDefaults
2.归档(序列化)
3.文件保存
4.数据库(sqlite)
5.CoreData
6.KeyChain
3.app目录结构:
家目录下有三个文件夹,在xcode5之前,沙盒和里面有4个文件,多一个app。(家目录:即沙盒(SandBox),沙盒目的就是保护当前应用程序的数据,两个不同的app不能共用一个app的沙盒数据。)
3个文件:
1.Documents:保存用户数据:用户产生的数据,比如下载图片,下载文件。改文件夹itunes备份里面的数据。
2.Library:有2个子文件夹。分别是Caches和Preferences。一般缓存文件一般都保存到Caches文件夹下面。
3.tmp:临时文件,当前程序终止的时候,该文件夹的数据会自动丢失。
注意:家目录在真机上没有权限。
获取Documents路径
/*
参数1:路径名字(ios能用到的:NSCachesDirectory,NSDocumentDirectory,NSLibraryDirectory)
参数2:NSUserDomainMask(用户安装目录)
参数3:YES表示完整路径
*/
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSLog(@"%@",path);
获取Cache目录
path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
NSLog(@"%@",path);
获取tmp路径
NSTemporaryDirectory();