iOS - 客户端网络请求 - 数据处理
2013-12-18 11:26
295 查看
原文链接:http://www.cnblogs.com/kw-ios/p/3479942.html
已知:iOS客户端,在某个界面,连网时,需向后台请求数据,断网时,读取本地数据
问题:数据量大时,如何处理这么庞大的数据?
解决方法:先读取本地数据,再从线上请求数据,与本地数据比较,更新本地数据,再次从读取本地数据。
OK,第一篇博客写完了。
已知:iOS客户端,在某个界面,连网时,需向后台请求数据,断网时,读取本地数据
问题:数据量大时,如何处理这么庞大的数据?
解决方法:先读取本地数据,再从线上请求数据,与本地数据比较,更新本地数据,再次从读取本地数据。
[self loadFromDb]; if (![[Helper isExistenceNetwork] isEqualToString:@"NotReachable"]) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self loadFromService]; }); }
#pragma mark - 读取数据库 - (void)loadFromDb { FMDatabase *db = [FMDatabase databaseWithPath:dbPath]; if (![db open]) { NSLog(@"Could not open db."); return; } FMResultSet *blogListResult; blogListResult = [db executeQueryWithFormat:@"select语句]; blogsData = [[NSMutableDictionary alloc] init]; oldListSource = [[NSMutableArray alloc] init]; while ([blogListResult next]) { NSMutableDictionary *blogsDic = [[NSMutableDictionary alloc] init]; // 组装数据 [blogsDic setObject:STATUS_DELETE forKey:@"status"]; NSString *key =[NSString stringWithFormat:@"%@", [blogsDic objectForKey:@"id"]]; [blogsData setObject:blogsDic forKey:key]; [blogsListSource addObject:blogsDic]; [oldListSource addObject:blogsDic]; } [db close]; [self reloadSource]; }
- (void)requestFinished:(ASIHTTPRequest *)request { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSDictionary *result = [[[NSString alloc] initWithData:[request responseData] encoding:NSUTF8StringEncoding] objectFromJSONString]; NSArray *blogListAry = [result objectForKey:@"blogList"]; BOOL isChanged = NO; FMDatabase *db = [FMDatabase databaseWithPath:dbPath]; if (![db open]) { NSLog(@"Could not open db."); return; } if ([blogListAry count] != [oldListSource count]) { isChanged = YES; } for (int i = 0; i < [blogListAry count]; i++) { NSDictionary *blogs = [blogListAry objectAtIndex:i]; if ([blogsData objectForKey:[NSString stringWithFormat:@"%@", [blogs objectForKey:@"id"]]]) { NSMutableDictionary *oldSpace = [blogsData objectForKey:[NSString stringWithFormat:@"%@", [blogs objectForKey:@"id"]]]; //更新本地数据库 isChanged = YES; //改变oldSpace中key的值也就相当于改变了oldListSource中key的值 [oldSpace setObject:STATUS_NORMAL forKey:@"status"]; }else{ //插入本地数据库 isChanged = YES; } } if (isChanged) { for (int i = 0; i < [oldListSource count]; i++) { NSMutableDictionary *oSpace = [oldListSource objectAtIndex:i]; if ([[oSpace objectForKey:@"status"] isEqualToString:STATUS_DELETE]) { //删除数据库多余的数据 } } dispatch_async(dispatch_get_main_queue(), ^{ [self loadFromDb]; }); } }); }
OK,第一篇博客写完了。
相关文章推荐
- iOS - 客户端网络请求 - 数据处理
- iOS:根据日志去定位网络请求发生的错误是由于服务端造成的,还是客户端造成的?
- iOS客户端校验https网络请求证书
- iOS -- 请求网络数据&数据处理
- iOS 网络数据请求带中文参数转换
- iOS NSURLConnection基础网络请求封装
- iOS 网络请求数据缓存
- iOS网络编程-ASIHTTPRequest小例子-数据请求队列
- iOS开发:网络请求之get、post同步异步请求
- iOS 开发 设置网络请求允许使用http
- iOS网络请求中常见的几种方式
- ios网络请求 get——post 区别
- ios开发网络请求(可能略旧)
- iOS讲解迷惑深入浅出之开启子线程请求网络
- iOS开发 网络请求——HTTP协议
- iOS之网络请求初解-AFNetworking(包含图片上传)
- 利用线程池实现Android客户端的http网络数据请求工具类
- 【iOS开发-网络】使用NSURLSessionDataTask发送get和post请求
- iOS开发 https请求网络web自定义证书不信任解决方案
- AFNetworking框架IOS网络数据请求由浅入深的使用方法