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;
}
是什么导致这个错误?如果您需要更多信息,我很乐意提供。非常感谢!
答
我不知道这是否是完全的问题或没有,但是这无疑是一个重大的问题:
-(void)setDateOfErgPiece:(NSDate *)date {
self.dateOfErgPiece = date;
// ...
self.dateOfErgPiece = date;
是完全等同于[self setDateOfErgPiece:date];
。
因此,作为该方法的第一行,该方法正在调用它自己。无限递归。
这应更改为以下...方法内self.dateOfErgPiece
-(void)setDateOfErgPiece:(NSDate *)date {
_dateOfErgPiece = date;
// ...
其他引用似乎没关系,因为他们希望被调用的getter:
[self dateOfErgPiece];
对于任何EXC_BAD_ACCESS错误,通常可以使用NSZombieEnabled跟踪这些错误。 – codercat
可能你的对象释放了某些地方或之前的获取日期数组,你可能会调用initWithDate – codercat