我有一个应该保存一些数据的类:
标题:
#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的新手,从来没有写过一个包含数据的类......
答案 0 :(得分:3)
当你的getter / setter自己调用时,看起来你得到了一个堆栈溢出错误。例如,此代码
-(void)setTag:(Tag *)tag{
self.tag = tag;
}
是无限递归,因为self.tag = tag
是写[self setTag:tag]
的另一种语法。
如果您使用的是最新的Xcode,那么您需要做的就是删除手动添加的tag
和behandler
的getter和setter的声明和定义。编译器将生成等效的代码,但没有无限递归。
注意:当您需要访问“备份”自动生成的属性的变量时,存在合法的情况。按照惯例,该变量的名称是以下划线为前缀的属性的名称。您可以在属性的@synthesize
指令中覆盖它。