EXC_BAD_ACCESS code = 2 Xcode中的自定义类初始化错误

问题描述:

我试图初始化我的视图控制器中的自定义类来管理数据。不幸的是,应用程序在加载过程中崩溃。我使用lldb调试器运行Xcode 5.02。我得到的错误是EXC_BAD_ACCESS code = 2 Xcode中的自定义类初始化错误

Thread 1: EXC_BAD_ACCESS (code=2, address=0xbf7ffffc) 

错误显示了在第一行( - (空)...)功能

-(void)setDateOfErgPiece:(NSDate *)date 
{ 
    self.dateOfErgPiece = date; 

    if(self.dateOfErgPiece) { 
     // Date Formatter. So Date is displayed correctly 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
     [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 
     // Set value 
     self.dateOfErgPieceString = [NSString stringWithFormat:@"%@", [dateFormatter stringFromDate:self.dateOfErgPiece]]; 
    } 

} 

当对象被

初始化调用该方法的
-(id)initWithDate:(NSDate *)date 
{ 
    self = [super init]; 

    if(self) { 
     [self setDateOfErgPiece:date]; 
    } 

    return self; 
} 

在上述init方法的(的NSDate *)日期值从该方法中接收到的

-(ErgNewDataEntryLogic *)ergPieceData { 
    if(!_ergPieceData) _ergPieceData = [[ErgNewDataEntryLogic alloc] initWithDate:[NSDate date]]; 
    return _ergPieceData; 
} 

是什么导致这个错误?如果您需要更多信息,我很乐意提供。非常感谢!

+1

对于任何EXC_BAD_ACCESS错误,通常可以使用NSZombieEnabled跟踪这些错误。 – codercat

+0

可能你的对象释放了某些地方或之前的获取日期数组,你可能会调用initWithDate – codercat

我不知道这是否是完全的问题或没有,但是这无疑是一个重大的问题:

-(void)setDateOfErgPiece:(NSDate *)date { 
    self.dateOfErgPiece = date; 
    // ... 

self.dateOfErgPiece = date;是完全等同于[self setDateOfErgPiece:date];

因此,作为该方法的第一行,该方法正在调用它自己。无限递归。

这应更改为以下...方法内self.dateOfErgPiece

-(void)setDateOfErgPiece:(NSDate *)date { 
    _dateOfErgPiece = date; 
    // ... 

其他引用似乎没关系,因为他们希望被调用的getter:

[self dateOfErgPiece];