Thread1 exc_bad_access(code = 2)...帮助我

时间:2014-03-30 08:17:35

标签: ios objective-c

我已经解决了这个问题几天了。但似乎无法得到它.. 帮帮我..

让我解释一下我的情况。基本上,我有导航控制器,其中包含表格视图控制器和视图控制器。我正在制作简单的电话簿应用程序。

并且,我在扩展类

中声明了一个目录条目
@interface DetailViewController ()

@property DirectoryEntry *dirEntry;

@end

而且,在表格视图中,当您点击该按钮时,它会通过 segue

传输一些数据
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    DetailViewController *detailCV = [segue destinationViewController];

    if ([segue.identifier isEqualToString:@"cellToDetail"]) {

        [detailCV setDirEntry: [self.pbArray objectAtIndex:[self.tableView     indexPathForSelectedRow].row]];

    } else {

        detailCV.dirEntry = nil;

    }

    //designate delegate !!!
    detailCV.delegate = self;

}
执行 detailCV.dirEntry = nil; 时会发生

我的问题,它会在viewController中调用我的setter。它表示EXC_BAD_ACCESS

 -(void) setDirEntry:(DirectoryEntry *) dirEntry {
    self.dirEntry  = dirEntry;
}

提前谢谢..

1 个答案:

答案 0 :(得分:1)

它不是一个EXC_BAD_ACCESS,就像操作系统因为粉碎堆栈而杀死你的应用程序一样。这种方法无限递归:

-(void) setDirEntry:(DirectoryEntry *) dirEntry {
    self.dirEntry  = dirEntry;
}

你对点符号的使用扩展到了一个设置器,这应该使它更清晰。

-(void) setDirEntry:(DirectoryEntry *) dirEntry {
    [self setDirEntry:dirEntry];
}

直接设置实例变量,或让编译器处理它。类扩展中的属性是自动合成的。