将Enum分配给Objective-C中的变量

Sam*_*cer 3 enums runtime-error objective-c ios

如何为变量分配并在以后访问其值?我认为这很简单,但每次我尝试将enum值赋给变量(Xcode中没有类型不匹配或警告出现)时,我的应用程序崩溃并出现EXC_BAD_ACCESS错误.

以下是我enum在头文件(BarTypes.h)中设置的方法:

typedef enum {
    BarStyleGlossy,
    BarStyleMatte,
    BarStyleFlat
} BarDisplayStyle;
Run Code Online (Sandbox Code Playgroud)

没有问题(至少阅读和使用这些值).但是,当我创建一个可以存储其中一个enum值的变量(BarStyleGlossy,BarStyleMatteBarStyleFlat)然后尝试设置该变量时,应用程序崩溃了.以下是我设置和使用变量的方法:

//Header
@property (nonatomic, assign, readwrite) BarDisplayStyle barViewDisplayStyle; //I've also tried just using (nonatomic) and I've also tried (nonatomic, assign)

//Implementation
@synthesize barViewDisplayStyle;

- (void)setupBarStyle:(BarDisplayStyle)displayStyle {
    //This is where it crashes:
    self.barViewDisplayStyle = displayStyle;
}
Run Code Online (Sandbox Code Playgroud)

为什么会在这里崩溃?如何将枚举的值存储在变量中?我认为这个问题与enums我最终缺乏理解有关,但如果我遵循传统的变量设置和分配等,这应该有效.关于我做错了什么的任何想法?

请注意我是enums的新手,所以我的词汇可能有些混乱(原谅我 - 如果你知道我想说的话,可以自由编辑).

我发现了一些关于enums网络的参考文献:

编辑:这是我如何称呼该setupBarStyle方法:

BarView *bar = [[BarView alloc] init];
[bar setupBarStyle:displayStyle];
Run Code Online (Sandbox Code Playgroud)

小智 8

以防有人在那里仍然试图找出如何将枚举值分配给枚举类型的变量或属性...这是一个使用属性的示例.

在头文件中......

@interface elmTaskMeasurement : NSObject

typedef NS_ENUM(NSInteger, MeasurementType) {
    D,
    N,
    T,
    Y,
    M
};

@property(nonatomic) MeasurementType MeasureType;

@end
Run Code Online (Sandbox Code Playgroud)

在创建对象的文件中...

elmTaskMeasurement *taskMeasurement = [[elmTaskMeasurement alloc] init];

taskMeasurement.MeasureType = (MeasurementType)N;
Run Code Online (Sandbox Code Playgroud)