ios 变量报EXC_BAD_ACCESS错误
做的是一个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错误信息
这个错误个人认为是对一个已经释放的对象进行操作所产生的,但是不知道错误发生在什么地方
回答:
看起来是你的oldIndex出了问题。两个建议
1,用copy来管理oldIndex,并且在调用时使用 self.
@property (nonatomic, copy) NSIndexPath *oldIndex;
NSLog(@"section: %d, row: %d", self.oldIndex.section, self.oldIndex.row);
2,不直接比较NSIndexPath对象
if (indexPath.section == self.oldIndex.section&& indexPath.row == self.oldIndex.row) {
;;
}
回答:
oldIndex第一次使用的时候,还光声明了,没初始化吧,假如默认没走“indexPath.row==2”分支的话
回答:
为什么不用ARC呢?完全可以避免这种问题
以上是 ios 变量报EXC_BAD_ACCESS错误 的全部内容, 来源链接: utcz.com/p/184693.html