UITableView 在重新加载数据后不会立即显示单元格
Posted
技术标签:
【中文标题】UITableView 在重新加载数据后不会立即显示单元格【英文标题】:UITableView does not display cell immediately after reloading data 【发布时间】:2014-04-29 02:17:19 【问题描述】:在viewDidload中,tableview从服务器加载数据
success:^(NSArray *array)
if (!_dataSource)
_dataSource = [@[] mutableCopy];
if (array)
[_dataSource addObjectsFromArray:array];
[_tableView reloadData];
然后每次我从底部拉起时,从服务器获取新数据并将其附加到 _dataSource(与第一次相同)
success:^(NSArray *array)
if (!_dataSource)
_dataSource = [@[] mutableCopy];
if (array)
[_dataSource addObjectsFromArray:array];
[_tableView reloadData];
现在问题来了:有时从底部拉起,成功获取新数据,但是tableview不会立即显示新单元格,当我扫描tableview时(即使只是触摸屏幕)新的显示单元格。 可能是什么问题?
编辑
因为每个单元格的高度不一样,所以我没有重用单元格,每次都初始化一个新的单元格,是这个原因吗?
// TopicCell *cell = [tableView dequeueReusableCellWithIdentifier:TopicCellIdentifier];
// if(!cell)
// cell = [[TopicCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TopicCellIdentifier];
//
TopicCell *cell = [[TopicCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TopicCellIdentifier];
@Jeffery Thomas,成功只是像这样的 AFNetworking 块
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:path
parameters:parameters
success:^(AFHTTPRequestOperation *operation1, id responseObject)
failure:^(AFHTTPRequestOperation *operation2, NSError *error)
];
【问题讨论】:
你在 mainThread 中重新加载数据? @nmh 当然[_tableView reloadData];
在主线程中。
如果您发布更多背景信息会很有帮助。包含success:
的方法是什么?
@JefferyThomas 谢谢,请查看附加消息。
您的 AFNetworking 调用的上下文是什么? scrollViewDidScroll:
?
【参考方案1】:
作为第一个猜测,我会确保您在主线程(队列)上运行-reloadData
。这很简单。
success:^(NSArray *array)
dispatch_async(dispatch_get_main_queue(), ^
if (!_dataSource)
_dataSource = [@[] mutableCopy];
if (array)
[_dataSource addObjectsFromArray:array];
[_tableView reloadData];
);
【讨论】:
【参考方案2】:您是否尝试将 _dataSource 设置为块变量,因为您正在更新块内的实例变量?还要确保在主线程中重新加载数据。
编辑
你做过类似的事情
__block YourViewController *this = self;
//Inside block
if (!this.dataSource)
this.dataSource = [@[] mutableCopy];
if (array)
[this.dataSource addObjectsFromArray:array];
[this.tableView reloadData];
【讨论】:
谢谢,我改成__block了,问题依旧存在。【参考方案3】:我的错误:
我为 _dataSorce 制作了错误的页面信息,例如
第一次从服务器加载 20 个 NSObjects,_dataSource is [0:19]
第二次从服务器加载 20 个 NSObjects,_dataSource should be [0:39]
,我错了[20:59]
无论如何,如果_dataSource
的索引正确,则不会显示此有线问题。
【讨论】:
以上是关于UITableView 在重新加载数据后不会立即显示单元格的主要内容,如果未能解决你的问题,请参考以下文章
数据源与后台 NSManagedObjectContext 合并后 UITableView 不会重新加载
UITableView 在使用 Swift 中的 Master Detail App 滚动之前不会重新加载
当我动态更改其框架时,即使重新加载后 UITableView 内容大小也不会更新