重新加载数据后,UITableView不会立即显示单元格

时间:2014-04-29 02:17:19

标签: ios objective-c uitableview

在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) {

             }];

3 个答案:

答案 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的索引正确,它将不会显示此有线问题。