Сбой после попытки получить ссылку на UIImageView через viewWithTag - PullRequest
0 голосов
/ 12 мая 2011

Мне нужно нарисовать изображение в ячейке таблицы.До сих пор я не смог получить правильную ссылку на UIImageView после того, как я создал представление и назначил его ячейке.Та же процедура работает для UILabel, например.

Я не могу понять, что я делаю неправильно.

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UIImageView *imageView;
    UILabel *title;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                       reuseIdentifier:CellIdentifier] autorelease];

        // Setup title
        title = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)] autorelease];
        title.tag = 1;
        [cell.contentView addSubview:title];

        // Setup image
        UIImageView* imageView = [[[ UIImageView alloc] initWithFrame: 
                                   CGRectMake(50, 0, 50, 50)] autorelease];
        imageView.tag = 2;
        [cell.contentView addSubview:imageView];

    } else {
        // Get references to cell views
        title = (UILabel *)[cell.contentView viewWithTag:1];
        imageView = (UIImageView *)[cell.contentView viewWithTag:2];
    }

    NSLog(@"%@", [title class]);     // UILabel
    NSLog(@"%@", [imageView class]); // CRASH! EXC_BAD_ACCESS

    return cell;
}

1 Ответ

2 голосов
/ 12 мая 2011

Проблема в области действия переменных imageView.В случае, если ячейка еще не существует, вы создаете новый UIImageView, который существует только в блоке if.Он скрывает переменную, которую вы объявили ранее, и исчезает после окончания блока if.Вместо

UIImageView *imageView = ...

вы должны просто написать

imageView = ...

В противном случае вы создаете новый объект, который не имеет ничего общего с объектом, который вы объявили в верхней части метода иоригинал imageView по-прежнему не определен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...