iOS点滴记录

MagicalRecord 在网络请求中的应用

2017-05-10  本文已影响9人  henu_Larva

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);
    }];
}

对数据进行存储时,一定要先判断数据是否已经存储过,不然会保存很多重复数据!

上一篇下一篇

猜你喜欢

热点阅读