iOS问题积累- 解决列表数据重复问题

三个列表,因为我使用了一个数据源,在弱网的情况下,随便点击刷新,就会出现数据错乱。

数据错误.png

没加锁之前的写法,虽然我在每次刷新之前都清空了数据源,但是还是出现了数据错误的情况,是因为在快速下啦加载和上啦刷新的同时,2个线程同时对数据源操作,如果在2个线程都判断infomations为空时,都添加数据,此时就会出错。

[NetWorkClient getMessageList:noticeType page:page success:^(id response) {
        if ([response[@"code"] integerValue] == 100) {
            NSArray *arr=response[@"data"][@"messageList"];
            if (arr.count<=0) {
                [self.mainTableView.mj_footer endRefreshingWithNoMoreData];
            }else{
                    if (_currentPage == 1) {
                        [_infomations removeAllObjects];
                        [self.infomations addObjectsFromArray:arr];
                    }else{
                        [self.infomations addObjectsFromArray:arr];
                    }
                    [self.mainTableView reloadData];
            }
        }
    } failure:^(NSError *err) {
    }];

解决办法,就需要对这个方法进行加锁。

        [_mutexLock lock];
        if ([response[@"code"] integerValue] == 100) {
 
            NSArray *arr=response[@"data"][@"messageList"];
            if (arr.count<=0) {
                [self.mainTableView.mj_footer endRefreshingWithNoMoreData];
            }else{
                    if (_currentPage == 1) {
                        [_infomations removeAllObjects];
                        [self.infomations addObjectsFromArray:arr];

                    }else{
                        [self.infomations addObjectsFromArray:arr];
                    }
                    [self.mainTableView reloadData];
            }
        }
          [_mutexLock unlock];

参考:
http://www.cocoachina.com/ios/20161105/17967.html
https://segmentfault.com/q/1010000006002907

你可能感兴趣的:(iOS问题积累- 解决列表数据重复问题)