关于ios:在Objective-C中将枚举分配给变量

Assign Enum to Variable in Objective-C

如何将枚举赋给变量并在以后访问其值?我认为这很简单,但每次我试图将enum值赋给变量(Xcode中没有出现类型不匹配或警告)时,我的应用程序都会崩溃,并出现exc-bad-au访问错误。

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

1
2
3
4
5
typedef enum {
    BarStyleGlossy,
    BarStyleMatte,
    BarStyleFlat
} BarDisplayStyle;

没有问题(至少读取和使用这些值)。但是,当我创建一个可以存储enum值之一(barStyleGlosh、barStyleMatte或barStyleFlat)的变量时,尝试设置该变量,应用程序崩溃。以下是我如何设置和使用变量:

1
2
3
4
5
6
7
8
9
10
//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;
}

为什么它会在这里坠毁?如何将枚举值存储在变量中?我认为这个问题与我对enums的理解不足有关,但是如果我遵循传统的变量设置和分配等,这应该是可行的。对我做错了什么有什么看法吗?

请注意,我刚接触过enum,所以我这里的词汇可能有点混乱(请原谅我-如果你知道我想说什么,请随意编辑)。

我在网上找到了一些关于enums的参考资料:

  • 什么是Objective-C中的typedef枚举?
  • 在目标C中使用枚举类型作为属性
  • 如何创建全局枚举
  • 如何在Objective-C中定义和使用枚举?
  • 我还尝试搜索苹果的开发者站点,但只得到了苹果API的类型(Ex.Fuffic,UiKIT等)的结果。

编辑:下面是我如何调用setupBarStyle方法:

1
2
BarView *bar = [[BarView alloc] init];
[bar setupBarStyle:displayStyle];


以防万一有人仍在试图找出如何将枚举值赋给枚举类型的变量或属性…下面是一个使用属性的示例。

在头文件中…

1
2
3
4
5
6
7
8
9
10
11
12
13
@interface elmTaskMeasurement : NSObject

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

@property(nonatomic) MeasurementType MeasureType;

@end

在创建对象的文件中…

1
2
3
elmTaskMeasurement *taskMeasurement = [[elmTaskMeasurement alloc] init];

taskMeasurement.MeasureType = (MeasurementType)N;

我自己也犯了这个错误,但这个错误是由我自己创建的另一个错误引起的。

我的属性"MyApplicationState"的设置者如下:

1
2
3
4
-(void)setApplicationStyle:(myApplicationStyle)applicationStyle{
    self.applicationStyle = applicationStyle;
    //some more code
}

当然,这会导致一个无休止的循环,因为在setter中,设置会被一次又一次地调用。

它必须是:

1
2
3
4
-(void)setApplicationStyle:(myApplicationStyle)applicationStyle{
    _applicationStyle = applicationStyle;
    //some more code
}


您实现的方法称为setupBarStyle:,但您在对象上调用setupBarShape: