单击自定义UITableViewCell上的按钮会抛出EXC_BAD_ACCESS

时间:2013-09-15 14:10:25

标签: ios objective-c uitableview exc-bad-access

我有一个自定义UITableViewCell(ReservationsCell.h / ReservationsCell.m / ReservationsCell.xib),其中包含一个按钮。在NIB文件中,标识符设置为reservationsCell,文件所有者设置为视图控制器,自定义类设置为ReservationsCell。按钮的TouchUpInside事件链接到在ViewController文件中编写的IBAction。

问题

当我点击按钮时,我得到一个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

请帮帮我。提前致谢! :)

2 个答案:

答案 0 :(得分:1)

正在发生的事情是您的UIButton已在UITableViewCell的重用实例中定义,因此可能会附加到已释放和取消分配的UITableViewCell个实例。

您应该做的是照顾IBAction本身UITableViewCell中的ReservationsCell {(1 {}})。这些触摸事件应该转发到通过委托协调事物的UIViewController(如果你需要单元格索引,也可以传递它)。

祝你好运!

答案 1 :(得分:0)

不要将FilesOwner设置为自定义UITableViewCell笔尖 - 这会导致奇怪的问题,其中包括您看到的这个错误。设置单元格本身的自定义类,连接UI插座,并让自定义UITableViewCell类中的代码完成工作(或将工作委托给其拥有UITableView)。