EXC_BAD_ACCESS Когда я нажимаю кнопку внутри пользовательского UITableViewCell - PullRequest
0 голосов
/ 07 марта 2012

Я создаю TableView с настраиваемым TableViewCell, в первой настраиваемой ячейке есть панель инструментов и несколько кнопок панели «Элемент», а также простая кнопка для тестирования.Проблема заключается в следующем: когда я нажимаю на любой элемент кнопки панели или на простую кнопку, у меня есть EXC_BAD _ACCESS?

Это мой код для построения ячеек таблицы:

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

    if(indexPath.row != 0){

        TaskCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil) {

            NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"TaskCell" owner:nil options:nil];

            for (UIView *view in views) {
                if([view isKindOfClass:[UITableViewCell class]])
                {
                    cell = (TaskCell*)view;
                }
            }
        }
        return cell;
    }
    else{

        if (travelInfoCell == nil) {

            NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"TravelInfo" owner:nil options:nil];

            for (UIView *view in views) {
                if([view isKindOfClass:[UITableViewCell class]])
                {
                    travelInfoCell = (TravelInfo*)view;
                }
            }
        }

        travelInfoCell.selectionStyle = UITableViewCellSelectionStyleNone;

        return travelInfoCell;
    }

}

Я планировалделегировать код действия в TableViewController, но на данный момент я даже не могу попасть в точку останова перед кнопкой IBAction.

Код в TravelInfo.m и не работает и выдает мне EXC_BAD _ACCESS:

- (IBAction)doAccepted:(id)sender {
    NSLog(@"accepted");
    //[delegate travelAccepted];
}

Есть решение?

1 Ответ

1 голос
/ 07 марта 2012

Вот ваша проблема:

travelInfoCell = (TravelInfo*)view;

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

travelInfoCell = [(TravelInfo*)view retain];

Не забудьте освободить ячейку и обнулить ее в viewDidUnload

...