0

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;
}
4

1 に答える 1

2

「進行中」ステータスのネットワーク リクエストも処理するようにデリゲート メソッドを変更します。そして、応答reloadDataを受け取ったら、適切なデータでテーブルをリロードする on tableview を呼び出します。

- (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;
    }
于 2012-10-23T04:58:26.427 に答える