2015-06-22 9 views
0

Я столкнулся с странным поведением. Я имел обыкновение иметь:NS_ENUM как свойство в протоколе

@property (nonatomic) ApplicationState applicationState;

непосредственно в моем классе Application. Теперь он извлекается с протоколом

@protocol ApplicationProtocol <NSObject> 
@property (nonatomic) ApplicationState applicationState; 

ApplicationState является Enum

typedef NS_ENUM(NSUInteger, ApplicationState) 
{ 
    ApplicationStateNormal = 0, 
    ApplicationStateExpanded = 1, 
    ApplicationStateMaximized = 2 
}; 

Сейчас. Это работало. Теперь такая строка: self.applicationState = ApplicationStateMaximized; вызываемый из класса реализации не вызывает никакого эффекта.


UPDATE

Agy, rickster вы оба правы. Я забыл добавить к этому вопросу примечание, что я уже синтезировал свойства в реализации класса. То, что я не заметил, что мой коллега добавил геттер, который возвращал всегда одно и то же значение (к сожалению, IDE не показывает этот аксессуар, пока я не дублировал свойство в своем классе)

ответ

1

Вы нужно синтезировать свойство:

@implementation Application 

@synthesize applicationState = _ applicationState; 

@end 

или объявить свойство снова:

@interface Application : NSObject <ApplicationProtocol> 

@property (nonatomic) ApplicationState applicationState; 

@end 
2

Объявление @property в протоколе не синтезирует хранилище или аксессуаров для этого свойства в классах, которые принимают протокол. Для этого, вы хотите что-то вроде этого:

@implementation Application 
@synthesize applicationState = _applicationState; 
Смежные вопросы