属性不与getter和setter一起工作

我已经定义了一个属性…

@property (nonatomic, strong) NSArray *eventTypes; 

我想重写getter和setter …

我写了这个…

 - (void)setEventTypes:(NSArray *)eventTypes { _eventTypes = eventTypes; //do some stuff here. } 

这工作正常,但是当我然后添加此…

 - (NSArray*)eventTypes { //do some stuff here. return _eventTypes; } 

然后这两个函数显示错误,不知道_eventTypes是什么。

这是相同的任何方式。 它使用一个函数,但一旦我添加其他失败他们两个。

还有什么我需要做的呢? 似乎奇怪的是,它与任何一个机器人都不是两个。

虽然LLVM会自动综合后援伊娃(默认情况下是一个下划线前缀),如果你实现getter和setter方法,你将不会得到一个自动合成伊娃,这就是为什么你必须@synthesize eventTypes = _eventTypes; 手动。

你可以在这里阅读更多: http : //useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html

将其添加到@implementation

 @synthesize eventTypes = _eventTypes; 

你必须@合成你的财产。 我们使用它时,我们想创build一个自定义的getters和setters,如:

  • 读/写属性与自定义getter和setter;
  • ReadOnly属性与自定义getter;

在.m文件中的@implementation之后,添加:

 @synthesize propertyName = _propertyName; 

这告诉编译器你想得到该特定属性的方法“get”和“set”的控制权。 所以在那之后你的set和get的实现将会正常工作。


额外解释:

self.anyString = @“TEXT” ; 完全相同[self setAnyString:@“TEXT”]; 这两个都调用方法集。 如果你使用_anyString,你直接访问属性而不经过set方法。

因此,如果我们在set方法中调用self.property ,我们将创build一个无限循环。 一旦我们重写方法的“设置”和“得到”我们必须使用_而不是自我。

试试这一个:

 - (void)setEventTypes:(NSArray *)eventTypes { self.eventTypes = eventTypes; //do some stuff here. } - (NSArray*)eventTypes { //do some stuff here. return self.eventTypes; }