问题描述
看代码:
#viewDidLoad [self getActivityListFromNetwork];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshActivityListFromNetwork) name:@'backRefresh' object:nil];#refreshActivityListFromNetwork- (void)refreshActivityListFromNetwork{ [self.dataArray removeAllObjects]; [self getActivityListFromNetwork]; [self.mainTableView headerEndRefreshing];}
问题是:如果注销后重新登录的话会有一定概率出现重复数据。分析原因是点击登录后,页面加载执行了getActivityListFromNetwork这个方法。这时候去请求数据。在没有返回数据前执行了refreshActivityListFromNetwork又一次去请求了数据。导致两次请求获得的数据都加载出来了。。。
问题解答
回答1:在每次数据请求成功后执行 removeAllObjects 和 reloadData 即可,另外最好给你的网络请求方法相应的缓存机制,没有新的数据时,无需更新数据源。
回答2:自问自答。。。。
回答3:为什么不是网络请求回来获取到数据才执行[self.dataArray removeAllObjects];呢?
回答4:同意楼上,数据源removeAllObjects 要放在网络请求成功里边
回答5:额,为什么用这么恶心的写法了,代理,block值得你拥有