在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不会立即显示新单元格单元格显示。 可能是什么问题?
因为每个单元格的高度不同,所以我不会重复使用单元格,并且每次都会初始化一个新单元格,这是什么原因?
// 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) {
}];
答案 0 :(得分:2)
作为第一个猜测,我会确保在主线程(队列)上运行-reloadData
。这很简单。
success:^(NSArray *array) {
dispatch_async(dispatch_get_main_queue(), ^{
if (!_dataSource) {
_dataSource = [@[] mutableCopy];
}
if (array) {
[_dataSource addObjectsFromArray:array];
[_tableView reloadData];
}
});
}
答案 1 :(得分:0)
您是否尝试将_dataSource设置为块变量,因为您正在更新块内的实例变量?还要确保在主线程中重新加载数据。
被修改
你做过像
这样的事吗? __block YourViewController *this = self;
//Inside block
if (!this.dataSource) {
this.dataSource = [@[] mutableCopy];
}
if (array) {
[this.dataSource addObjectsFromArray:array];
[this.tableView reloadData];
}
答案 2 :(得分:0)
我的错误:
例如,我为 _dataSorce 制作了错误的页面信息
第一次从服务器加载20个NSObject,_dataSource is [0:19]
第二次从服务器_dataSource should be [0:39]
加载20多个NSObject,由于我的错误导致[20:59]
无论如何,如果_dataSource
的索引正确,它将不会显示此有线问题。