APP 中有时会遇到网络请求失败的情况,此时有两种常见的解决方案:
1.请求失败时展示一张 UI 图提示用户网络不好或者其他因素造成的请求失败;
2.提取事先存储的数据进行展示.
若要采取第二种方式,则需要在网络请求成功时,将网络数据存储在本地数据库内.下面是我的解决方案望各位大神多多指教!谢谢
- (void)getForumData {
NSMutableDictionary *infoDic = [NSMutableDictionary new];
[DJHTTPManager POST:url_forumList params:infoDic success:^(NSURLSessionDataTask *task, id responseObject) {
NSArray *forumDatas = [responseObject[@"data"] copy];
//请求成功后将数据存储在数据库内
for (NSDictionary *dic in forumDatas) {
//存储数据之前判断数据是否已经在数据库内存在
NSArray *find = [Forum MR_findByAttribute:@"forumId" withValue:dic[@"postId"]];
if (find.count == 0) {
//若不存在,则进行存储
Forum *singleForum = [Forum MR_createEntity];
singleForum.content = dic[@"content"];
singleForum.createTime = dic[@"createTime"];
singleForum.iconPath = dic[@"headPhoto"];
singleForum.identity = dic[@"identity"];
singleForum.mobileType = dic[@"mobileType"];
singleForum.nick = dic[@"nick"];
singleForum.pictures = dic[@"picture"];
singleForum.forumId = dic[@"postId"];
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
} else {
//若存在,则跳过存储环节
NSLog(@"该数据已存在,不再存储!!!");
}
}
NSArray *allDBData = [Forum MR_findAll];
NSLog(@"当前数据库中共有 %ld 条数据",allDBData.count);
} fail:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"err == %@",error.localizedDescription);
//网络出现错误时从数据库中取数据
NSArray *dbData = [[Forum MR_findAll] copy];
NSLog(@"网络错误时取到的数据库中的内容 === %@",dbData);
}];
}
对数据进行存储时,一定要先判断数据是否已经存储过,不然会保存很多重复数据!