我正在尝试在视图控制器中初始化自定义类来管理数据。不幸的是,应用程序在加载过程中崩溃了。我正在使用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;
}
导致此错误的原因是什么?如果您需要更多信息,我很乐意提供。非常感谢你!
答案 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];