ios 变量报EXC_BAD_ACCESS错误
大家讲道理
大家讲道理 2017-04-17 11:24:15
0
3
206

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

@interface UITableViewSingleChoiceViewController : UIViewController @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错误信息
这个错误个人认为是对一个已经释放的对象进行操作所产生的,但是不知道错误发生在什么地方

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

reply all (3)
迷茫

看起来是你的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”分支的话

      PHPzhong

      为什么不用ARC呢?完全可以避免这种问题

        Latest Downloads
        More>
        Web Effects
        Website Source Code
        Website Materials
        Front End Template
        About us Disclaimer Sitemap
        php.cn:Public welfare online PHP training,Help PHP learners grow quickly!