Xcode中自定义类初始化时EXC_BAD_ACCESS代码= 2错误

时间:2014-01-30 03:24:39

标签: ios objective-c ios7 lldb

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

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

错误显示在函数

的第一行( - (void)...)上
    -(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 个答案:

答案 0 :(得分:2)

我不知道这是不是问题,但这肯定是一个主要问题:

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

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

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

这应该改为以下......

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

方法中对self.dateOfErgPiece的其他引用似乎没问题,因为它们看起来正在调用getter:

[self dateOfErgPiece];