美文网首页iOS点滴记录
MagicalRecord 在网络请求中的应用

MagicalRecord 在网络请求中的应用

作者: henu_Larva | 来源:发表于2017-05-10 10:54 被阅读9次

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

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

    相关文章

      网友评论

        本文标题:MagicalRecord 在网络请求中的应用

        本文链接:https://www.haomeiwen.com/subject/vziwtxtx.html