这个错误个人认为是对一个已经释放的对象进行操作所产生的,但是不知道错误发生在什么地方啊!

做的是一个UITableView单选的简单Demo,但是在行选择的时候出现了EXC_BAD_ACCESS错误
先上代码:
UITableViewSingleChoiceViewController.h

@interface UITableViewSingleChoiceViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>@property(nonatomic,retain)NSIndexPath *oldIndex;@end

UITableViewSingleChoiceViewController.m

#import "UITableViewSingleChoiceViewController.h"#import "Cell.h"  //自定义的一个UITableViewCell@interface UITableViewSingleChoiceViewController ()@end@implementation UITableViewSingleChoiceViewController{    UITableView *table;
}@synthesize oldIndex;

-(void)viewDidLoad
{
    [super viewDidLoad];
    table=[[UITableView alloc]initWithFrame:self.view.bounds];
    table.delegate=self;
    table.dataSource=self;
    [self.view addSubview:table];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{    return 10;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{    NSArray *nib=[[NSBundle mainBundle]loadNibNamed:@"Cell" owner:self options:nil];
    Cell *cell=[nib objectAtIndex:0];    if(indexPath.row==2){
     cell.thumbnail.image=[UIImage imageNamed:@"帐号切换"];
        oldIndex=indexPath;
    }else{
        cell.thumbnail.image=[UIImage imageNamed:@"帐号切换2"];
    }
    cell.label.text=[NSString stringWithFormat:@"tableview cell - %d",indexPath.row+1];    return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{    if([indexPath isEqual:oldIndex]){        NSLog(@"行选择没有变");
    }else{
        Cell *newCell = (Cell *)[tableView cellForRowAtIndexPath:indexPath];
        newCell.thumbnail.image=[UIImage imageNamed:@"帐号切换"];

        Cell *oldCell = (Cell *)[tableView cellForRowAtIndexPath:oldIndex];
        oldCell.thumbnail.image=[UIImage imageNamed:@"帐号切换2"];
        oldIndex=indexPath;
    }
}@end

在 tableView didSelectRowAtIndexPath方法中的第一行就出现了EXC_BAD_ACCESS错误信息

http://img.mukewang.com/6443b6040001ab0914920360.jpg


鸿蒙传说
浏览 108回答 2
2回答

函数式编程

看起来是你的oldIndex出了问题。两个建议1,用copy来管理oldIndex,并且在调用时使用 self.@property&nbsp;(nonatomic,&nbsp;copy)&nbsp;NSIndexPath&nbsp;*oldIndex;NSLog(@"section:&nbsp;%d,&nbsp;row:&nbsp;%d",&nbsp;self.oldIndex.section,&nbsp;self.oldIndex.row);2,不直接比较NSIndexPath对象if&nbsp;(indexPath.section&nbsp;==&nbsp;self.oldIndex.section &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&&&nbsp;indexPath.row&nbsp;==&nbsp;self.oldIndex.row)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;;;}

子衿沉夜

oldIndex第一次使用的时候,还光声明了,没初始化吧,假如默认没走“indexPath.row==2”分支的话
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS