iOS:EXC_BAD_ACCESS(代码= 2,地址= 0x42)

时间:2014-04-11 12:53:22

标签: ios

我有一个应该保存一些数据的类:

标题:

#import <Foundation/Foundation.h>

@class Behandler, Tag;

@interface OeffnungsZeit2 : NSObject

@property (nonatomic, retain) NSNumber * offen_stunde;
@property (nonatomic, retain) NSNumber * offen_minute;
@property (nonatomic, retain) NSNumber * geschlossen_stunde;
@property (nonatomic, retain) NSNumber * geschlossen_minute;
@property (nonatomic, retain) Tag *tag;
@property (nonatomic, retain) Behandler *behandler;
-(void)setTag:(Tag *)tag;
-(Tag *)getTag;
-(void)setBehandler:(Behandler *)behandler;
-(Behandler *)getBehandler;
@end

主文件:

#import "OeffnungsZeit2.h"
#import "Behandler.h"
#import "Tag.h"


@implementation OeffnungsZeit2

@dynamic offen_stunde;
@dynamic offen_minute;
@dynamic geschlossen_stunde;
@dynamic geschlossen_minute;

-(void)setTag:(Tag *)tag{
    self.tag = tag;
}
-(Tag*)getTag{
    return self.tag;
}

-(void)setBehandler:(Behandler *)behandler{
    self.behandler = behandler;
}
-(Behandler*)getBehandler{
    return self.behandler;
}
@end

当我尝试访问它时,在这些行的某个地方:

NSArray *tage = [self fetchTageWithNummer:openDay];
Tag *tag = [tage objectAtIndex:0];
// create an OeffnungsZeit2 object and add it to our array
OeffnungsZeit2 *oeffnungsZeit2 = [[OeffnungsZeit2 alloc] init];
[oeffnungsZeit2 setTag:tag];
oeffnungsZeit2.offen_stunde = [NSNumber numberWithInt:[openHours intValue]];
oeffnungsZeit2.offen_minute = [NSNumber numberWithInt:[openMins intValue]];
oeffnungsZeit2.geschlossen_stunde = [NSNumber numberWithInt:[closeHours intValue]];
oeffnungsZeit2.geschlossen_minute = [NSNumber numberWithInt:[closeMins intValue]];
[self.oeffnungsZeiten addObject:oeffnungsZeit2];

我收到ECX_BAD_ACCESS错误。

任何人都可以暗示我,为什么这是错的?我是iOS的新手,从来没有写过一个包含数据的类......

1 个答案:

答案 0 :(得分:3)

当你的getter / setter自己调用时,看起来你得到了一个堆栈溢出错误。例如,此代码

-(void)setTag:(Tag *)tag{
    self.tag = tag;
}

是无限递归,因为self.tag = tag是写[self setTag:tag]的另一种语法。

如果您使用的是最新的Xcode,那么您需要做的就是删除手动添加的tagbehandler的getter和setter的声明和定义。编译器将生成等效的代码,但没有无限递归。

注意:当您需要访问“备份”自动生成的属性的变量时,存在合法的情况。按照惯例,该变量的名称是以下划线为前缀的属性的名称。您可以在属性的@synthesize指令中覆盖它。