EXC_BAD_ACCESS单击自定义UITableViewCell内的按钮时

时间:2012-03-06 23:31:02

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

我使用自定义TableViewCell构建一个TableView,第一个自定义单元格有一个工具栏和一些Bar按钮Item以及一个简单的测试按钮。 问题是:当我点击任何栏按钮项或简单按钮时,我有一个EXC_BAD _ACCESS?

这是构建tableview单元格的代码:

- (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 个答案:

答案 0 :(得分:1)

这是你的问题:

travelInfoCell = (TravelInfo*)view;

您没有保留对视图的引用,因此视图变量的预期寿命有限。您需要保留以保留参考。这样做:

travelInfoCell = [(TravelInfo*)view retain];

不要忘记释放单元格并在viewDidUnload

上取出它