UITableViewController在网络请求完成之前执行delate函数

时间:2012-10-23 04:42:33

标签: objective-c ios multithreading uitableview afnetworking

我在尝试使用网络请求的结果填充UITableView时遇到问题。似乎我的代码没问题,因为当我的网络速度很快时它可以正常工作,但是,当它不是这个功能时 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath-仍然执行,这会导致错误的访问错误。我认为这是因为上述函数试图利用的数组尚未填充。这让我想到了一个问题:无论如何,我可以推迟UITableView委托方法来避免这种情况吗?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"AlbumsCell";
//UITableViewCell *basicCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

AlbumsCell *cell = (AlbumsCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (!cell) {
    **// Here is where the Thread 1: EXC_BAD_ACCESS (code=2 address=0x8)**
    cell = [[[AlbumsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

    Album *album = [_albums objectAtIndex:[indexPath row]];
    [cell setAlbum:album];

return cell;
}

1 个答案:

答案 0 :(得分:2)

修改您的委托方法以处理“进行中”状态的网络请求。一旦你收到你的回复,请在tableview上调用reloadData,这将使用适当的数据重新加载表。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"AlbumsCell";
//UITableViewCell *basicCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    AlbumsCell *cell = (AlbumsCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (!cell) {
        **// Here is where the Thread 1: EXC_BAD_ACCESS (code=2 address=0x8)**
        cell = [[[AlbumsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    if ((_albums) && ([_albums count] > [indexPath row])) {
        Album *album = [_albums objectAtIndex:[indexPath row]];
        [cell setAlbum:album];
    } else {
    //show some loading message in the cell
    }

    return cell;
    }