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

Posted

技术标签:

【中文标题】Thread1 exc_bad_access (code =2)...帮帮我【英文标题】:Thread1 exc_bad_access (code =2)... help me 【发布时间】:2014-03-30 08:17:35 【问题描述】:

这几天我一直在解决这个问题。但似乎无法得到它.. 帮帮我..

让我解释一下我的情况。基本上,我有 navigation controller 包含 table view 控制器和 view 控制器。我正在制作简单的电话簿应用程序。

而且,我在扩展类中声明了一个目录条目

@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 中调用我的设置器。它说 EXC_BAD_ACCESS

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

提前谢谢你..

【问题讨论】:

【参考方案1】:

这与其说是一个 EXC_BAD_ACCESS,不如说是操作系统因为破坏堆栈而杀死了你的应用程序。这个方法是无限递归的:

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

您对点表示法的使用扩展到了一个 setter,这应该会更清楚。

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

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

【讨论】:

以上是关于Thread1 exc_bad_access (code =2)...帮帮我的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 在 Swift 中抛出 Thread1: EXC_BAD_ACCESS (code=1, address 0x...)

EZAudio 不起作用:创建 EZRecorder 实例时的 Thread1 EXC_BAD_ACCESS

Thread 1: EXC_BAD_ACCESS(当结构体遇上指针)

线程 1:EXC_BAD_ACCESS(代码=1,地址=0x0)错误

线程 1:EXC_BAD_ACCESS (code=1, address=0x20) 当 subView

收到“线程 1:EXC_BAD_ACCESS”错误?