2013-09-15 4 views
0

У меня есть пользовательский UITableViewCell (ReservationsCell.h/ReservationsCell.m/ReservationsCell.xib) с кнопкой в ​​нем, среди прочего. В файле NIB идентификатор устанавливается как reservationsCell, владелец файла установлен как контроллер просмотра, а пользовательский класс устанавливается как ReservationsCell. Событие TouchUpInside кнопки, связанное с IBAction, записанное в файле ViewController.нажатие кнопки на пользовательском UITableViewCell throws EXC_BAD_ACCESS

Проблема

, когда я нажимаю кнопку, я получаю EXC_BAD_ACCESS -[NSObject performSelector:withObject:withObject:]: message sent to deallocated instance 0x398e7ff0

Попытки

последние несколько часов научил меня, чтобы попробовать NSZombies и сказал мне, что ошибка была вызвана моим методом tableView:cellForRowAtIndexPath.

Код

ViewController.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    .....  

    // register ReservationCell nib 
    [self.reservationsTableView registerNib:[UINib nibWithNibName:@"ReservationsCell" bundle:nil] forCellReuseIdentifier:@"reservationsCell"]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"reservationsCell"; 
    ReservationsCell *cell = (ReservationsCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil]; 
     cell = [nib objectAtIndex:0]; 
    } 

    ...... 
} 

Согласно Zombies, конкретная строка, которая бросает ошибку, кажется dequeueReusableCellWithIdentifier.

Пожалуйста, помогите мне. Заранее спасибо! :)

+0

сообщение ваш сделанныйSelectRowAtIndexPath код! – thatzprem

+0

@PremKumar К сожалению, я даже не использовал этот метод. – chongzixin

ответ

1

Что происходит, так это то, что ваши UIButton s определены в повторяющихся экземплярах UITableViewCell и поэтому могут быть прикреплены к UITableViewCell экземплярам, ​​которые уже были освобождены и освобождены.

Что вам нужно сделать, так это позаботиться о IBAction s в самом UITableViewCell (ReservationsCell в вашем случае). Эти события касания должны быть перенаправлены на UIViewController, который координирует работу через делегирование (если вам нужен индекс ячейки, пропустите его также).

Удачи вам!

+0

Я довольно новичок в Objective C, не могли бы вы любезно указать мне на учебное пособие, в котором есть делегация, пожалуйста? – chongzixin

+0

Это может быть актуально: http://stackoverflow.com/questions/10556148/use-ibaction-from-uibutton-inside-custom-cell-in-main-view-controller – Stavash

+0

все работает сейчас! бесконечно благодарен! – chongzixin

0

Не устанавливайте FilesOwner в пользовательском UITableViewCell nib - это вызывает странные проблемы, среди которых эта ошибка, которую вы видите. Задайте собственный класс для самой ячейки, проложите свои выходные данные UI и введите код в настраиваемом классе UITableViewCell, выполнив эту работу (или делегируйте работу до ее владельца UITableView).

Смежные вопросы