iOS FMDataBase 实现离线缓存
2016-11-07 14:48
176 查看
controller
//徒步去旅行
@interface ViewController ()
@property (nonatomic,strong) NSMutableArray *array;
@end
@implementation ViewController
-(void)initData
{
//1.先读本地数据
self.array = [[TQDataBase sharedDataBase] getAllMovies];
}
-(void)requestData
{
AFHTTPRequestOperationManager *man = [AFHTTPRequestOperationManager manager];
}
(void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//1.先读本地数据
//2.判断网络状态 —> 加载新数据 NO 提示网络错误的信息
//3.加载新数据 —> 把之前数据库中的数据清空 新数据保存到数据库
[self initData];
//判断网络状态
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
if(status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi)
{
[self requestData];
}
else
{
NSLog(@”请检查网络连接”);
}
}];
//开启检测
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.array.count;
}
-(UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@”cell”];
}
dataBase
@implementation TQDataBase
{
FMDatabase *_fmDataBase;
}
(instancetype)init
{
self = [super init];
if (self) {
NSString *docPath = [NSString stringWithFormat:@”%@/Documents/movie.db”,NSHomeDirectory()];
}
return self;
}
+(TQDataBase *)sharedDataBase
{
static TQDataBase *dataBase = nil;
}
-(NSMutableArray *)getAllMovies
{
NSMutableArray *array = [[NSMutableArray alloc] init];
[_fmDataBase open];
}
-(BOOL)isDataExists
{
BOOL ret = NO;
[_fmDataBase open];
}
-(void)deleteAllDatas
{
[_fmDataBase open];
}
-(void)insertMovie:(TQMovie *)movie
{
[_fmDataBase open];
}
//徒步去旅行
@interface ViewController ()
@property (nonatomic,strong) NSMutableArray *array;
@end
@implementation ViewController
-(void)initData
{
//1.先读本地数据
self.array = [[TQDataBase sharedDataBase] getAllMovies];
}
-(void)requestData
{
AFHTTPRequestOperationManager *man = [AFHTTPRequestOperationManager manager];
[man GET:@"http://api.douban.com/v2/movie/top250?apikey=02d830457f4a8f6d088890d07ddfae47&start=0&count=20" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { //清空之前的数据 (数据库,数据源(array)) if([[TQDataBase sharedDataBase] isDataExists]) { [[TQDataBase sharedDataBase] deleteAllDatas]; [self.array removeAllObjects]; } for (NSDictionary *dict in responseObject[@"subjects"]) { TQMovie *movie = [[TQMovie alloc] init]; movie.movieImage = dict[@"images"][@"small"]; movie.movieTitle = dict[@"title"]; //把movie缓存到数据库 [[TQDataBase sharedDataBase] insertMovie:movie]; [self.array addObject:movie]; } [self.tableView reloadData]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { }];
}
(void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//1.先读本地数据
//2.判断网络状态 —> 加载新数据 NO 提示网络错误的信息
//3.加载新数据 —> 把之前数据库中的数据清空 新数据保存到数据库
[self initData];
//判断网络状态
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
if(status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi)
{
[self requestData];
}
else
{
NSLog(@”请检查网络连接”);
}
}];
//开启检测
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.array.count;
}
-(UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@”cell”];
TQMovie *movie = self.array[indexPath.row]; [cell.imageView sd_setImageWithURL:[NSURL URLWithString:movie.movieImage] placeholderImage:[UIImage imageNamed:@"photo"]]; cell.textLabel.text = movie.movieTitle; return cell;
}
dataBase
@implementation TQDataBase
{
FMDatabase *_fmDataBase;
}
(instancetype)init
{
self = [super init];
if (self) {
NSString *docPath = [NSString stringWithFormat:@”%@/Documents/movie.db”,NSHomeDirectory()];
NSLog(@"%@",NSHomeDirectory()); //创建数据库 以及 创建表 _fmDataBase = [FMDatabase databaseWithPath:docPath]; // [_fmDataBase open]; NSString *sqlStr = @"create table if not exists Movie (image text, title text)"; [_fmDataBase executeUpdate:sqlStr]; [_fmDataBase close];
}
return self;
}
+(TQDataBase *)sharedDataBase
{
static TQDataBase *dataBase = nil;
if(dataBase == nil) { dataBase = [[TQDataBase alloc] init]; } return dataBase;
}
-(NSMutableArray *)getAllMovies
{
NSMutableArray *array = [[NSMutableArray alloc] init];
[_fmDataBase open];
FMResultSet *set = [_fmDataBase executeQuery:@"select * from Movie"]; while ([set next]) { TQMovie *movie = [[TQMovie alloc] init]; movie.movieImage = [set stringForColumn:@"image"]; movie.movieTitle = [set stringForColumn:@"title"]; [array addObject:movie]; } [_fmDataBase close]; return array;
}
-(BOOL)isDataExists
{
BOOL ret = NO;
[_fmDataBase open];
ret = [[_fmDataBase executeQuery:@"select * from Movie"] next]; [_fmDataBase close]; return ret;
}
-(void)deleteAllDatas
{
[_fmDataBase open];
[_fmDataBase executeUpdate:@"delete from Movie"]; [_fmDataBase close];
}
-(void)insertMovie:(TQMovie *)movie
{
[_fmDataBase open];
NSString *sqlStr = @"insert into Movie (image,title) values (?,?)"; [_fmDataBase executeUpdate:sqlStr,movie.movieImage,movie.movieTitle]; [_fmDataBase close];
}
相关文章推荐
- IOS:FMDatabase的使用
- iOS FMDatabase 本地数据库的创建和几个基本使用方法
- 在iOS项目中使用FMDataBase
- [iOS进阶]FMDataBase 学习小结
- IOS开发源码阅读篇--FMDB源码分析3(FMDatabaseQueue+FMDatabasePool)
- IOS开发源码阅读篇--FMDB源码分析2(FMDatabase+FMDatabaseAdditions)
- iOS FMDatabase 本地数据库的创建和几个基本使用方法 【原创】
- IOS简单的离线缓存实现
- iOS开发通过NSURLProtocol实现UIWebView的离线缓存(离线加载),OC版和Swift3.0版
- iOS: 学习笔记, 使用FMDatabase操作sqlite3
- iOS 修改FMdatabase,不使用FMDatabaseQueue支持多线程数据库操作
- iOS开发 - FMDatabase 使用
- iOS FMDataBase split 使用
- ios实现基于socket tcp/ip 的通讯
- iOS-实现简单的动画效果
- iOS实现本地通知(local notification)的方法
- iOS实现本地通知
- 实现 iOS 应用自动编译
- 基于rtsp的手机视频点播实现和研究(扩展支持android, ios平台)
- ios实现条形码扫描功能