Подтвердить что ты не робот

Свойство, не работающее с getter AND 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.

Это то же самое в любом случае. Он работает с одной функцией, но как только я добавляю другой, он терпит неудачу в обоих из них.

Есть ли что-то еще для этого? Кажется странным, что он работает ни с одним ботом, ни с обоими.

4b9b3361

Ответ 1

Несмотря на то, что LLVM автоматически синтезирует базовый ivar (с префиксом подчеркивания по умолчанию), в случае, когда вы применяете методы getter и setter, вы не получаете автоинформированный ivar и поэтому вы должны @synthesize eventTypes = _eventTypes; вручную.

Подробнее об этом можно прочитать здесь: http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html

Ответ 2

Добавьте это в @implementation

@synthesize eventTypes = _eventTypes;

Ответ 3

Вы должны @synthesize свою собственность. Мы используем его, когда хотим создать пользовательские геттеры и сеттеры, например:

  • Свойство Read/Write с пользовательским getter и setter;
  • свойство ReadOnly с пользовательским getter;

Сразу после вашего @implementation в .m файле добавьте:

@synthesize propertyName = _propertyName;

Это говорит компилятору, что вы хотите получить контроль над методами "get" и "set" этого конкретного свойства. Итак, после этого ваша реализация set и get будет работать нормально.


Дополнительные пояснения:

self.anyString = @ "ТЕКСТ" ; точно соответствует [self setAnyString: @ "TEXT" ]; Оба они вызывают набор методов. Если вы используете _anyString, вы сразу получаете доступ к свойству без прохождения через метод set.

Поэтому из-за этого, если мы будем называть self.property внутри метода set, мы создадим бесконечный цикл. Как только мы переписываем методы 'set' и 'get' Мы должны использовать _ вместо self..

Ответ 4

Попробуйте следующее:

- (void)setEventTypes:(NSArray *)eventTypes
{
    self.eventTypes = eventTypes;

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

    return self.eventTypes;
}