NS_ENUM作为协议中的属性

时间:2015-06-22 15:32:42

标签: ios objective-c automatic-ref-counting

我遇到了奇怪的行为。我曾经有过:

@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; 从实现类调用没有任何影响。

更新

Agyrickster你是对的。我忘了添加这个问题注释,我已经在实现类中合成了属性。我没有注意到,我的同事添加了getter,它总是返回相同的值(不幸的是,IDE deosn并没有显示这个访问者,直到我在课堂上复制了属性)

2 个答案:

答案 0 :(得分:2)

在协议中声明@property不会在采用该协议的类中合成该属性的存储或访问器。为此,你需要这样的东西:

@implementation Application
@synthesize applicationState = _applicationState;

答案 1 :(得分:1)

您需要合成属性:

@implementation Application

@synthesize applicationState = _ applicationState;

@end

或再次申报该财产:

@interface Application : NSObject <ApplicationProtocol>

@property (nonatomic) ApplicationState applicationState;

@end