af网络请求里,刷新tableview,reloaddate方法执行两次
2017-06-20 15:50
337 查看
其实并不是执行两次,
之所以在cellforheight跟cellforrow方法里打印了两遍的结果
是因为,
一:使用了xib来展示tableview。二:reloaddata不会等待tableview完全刷新完才返回,而是立即返回,这也就是输,你加在reloaddata后边的代码会立即执行(包括对某个,某些cell的操作),然后tableview可能才执行,这样引起的后果就是,你对cell的数据展示等的操作,可能被tableview的reloaddata重新置空或赋新值。
解决方法有两个:
方法1:
[self.tableView reloadData];
[self.tableView layoutIfNeeded];
layoutIfNeeded会强制重绘并等待完成。
方法2:
[self.tableView reloadData];
reloadDate会在主队列执行,dispatch_get_main_queue会等待机会,知道主队列空闲才执行。
dispatch_async(dispatch_get_main_queue(), ^{
//刷新完成
});
我选择的是方法二,因为对于UI的操作,我认为还是让主线程来自动操作的好.
更多问题,欢迎加群讨论:qq群 :565191947
之所以在cellforheight跟cellforrow方法里打印了两遍的结果
是因为,
一:使用了xib来展示tableview。二:reloaddata不会等待tableview完全刷新完才返回,而是立即返回,这也就是输,你加在reloaddata后边的代码会立即执行(包括对某个,某些cell的操作),然后tableview可能才执行,这样引起的后果就是,你对cell的数据展示等的操作,可能被tableview的reloaddata重新置空或赋新值。
解决方法有两个:
方法1:
[self.tableView reloadData];
[self.tableView layoutIfNeeded];
layoutIfNeeded会强制重绘并等待完成。
方法2:
[self.tableView reloadData];
reloadDate会在主队列执行,dispatch_get_main_queue会等待机会,知道主队列空闲才执行。
dispatch_async(dispatch_get_main_queue(), ^{
//刷新完成
});
我选择的是方法二,因为对于UI的操作,我认为还是让主线程来自动操作的好.
更多问题,欢迎加群讨论:qq群 :565191947
相关文章推荐
- Cocos2d-x学习之---关于CCTableView中reloadData()操作,删除第一个/最后一个cell后tableview位置未刷新的问题
- 无线承载网络“组或资源的状态不是执行请求操作的正确状态”解决方法
- UITableView的reloadData方法,不执行cellForRow方法,但是执行了numberOfRows和heightForRow方法
- Swift 网络请求, 图片加载, tableView, collectionView, webView(八)
- struts2请求两次即action方法执行两次
- 自定义带网络请求的UITableView中tableHeaderView视图
- TableView的刷新问题(2种方法
- iOS中tableView的三种刷新方法
- [tableView reloadData]方法添加动画的方法
- 为什么TableView 的代理方法cellForRowAtIndexPath 不执行问题
- 在IE浏览器中执行OpenFlashChart的reload方法时无法刷新的解决方法
- tableView代理方法执行顺序
- TableView的属性和方法的执行顺序
- UITableView的reloadData方法,不执行cellForRow方法,
- tableview执行了 两次 手势,
- -tableView: cellForRowAtIndexPath:方法不执行问题
- iOS tableview 没有执行cellForRowAtInceldexPath 方法
- IOS给tableview的cell添加长按手势执行两次(UILongPressGestureRecognizer)
- Struts2 请求一次Action,却执行两次方法的解决
- 关于SearchView中onQueryTextSubmit方法执行两次的解决方法