我有一个自定义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
。
请帮帮我。提前致谢! :)
答案 0 :(得分:1)
正在发生的事情是您的UIButton
已在UITableViewCell
的重用实例中定义,因此可能会附加到已释放和取消分配的UITableViewCell
个实例。
您应该做的是照顾IBAction
本身UITableViewCell
中的ReservationsCell
{(1 {}})。这些触摸事件应该转发到通过委托协调事物的UIViewController
(如果你需要单元格索引,也可以传递它)。
答案 1 :(得分:0)
不要将FilesOwner设置为自定义UITableViewCell
笔尖 - 这会导致奇怪的问题,其中包括您看到的这个错误。设置单元格本身的自定义类,连接UI插座,并让自定义UITableViewCell
类中的代码完成工作(或将工作委托给其拥有UITableView
)。