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

时间:2013-06-05 20:55:28

标签: ios objective-c enums runtime-error

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

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

typedef enum {
    BarStyleGlossy,
    BarStyleMatte,
    BarStyleFlat
} BarDisplayStyle;

那里没有问题(至少阅读和使用这些值)。但是,当我创建一个可以存储enum值之一( BarStyleGlossy BarStyleMatte BarStyleFlat )的变量时,请尝试设置该变量,应用程序崩溃。以下是我设置和使用变量的方法:

//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的引用:

编辑:以下是我调用setupBarStyle方法的方法:

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

3 个答案:

答案 0 :(得分:8)

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

在标题文件中......

@interface elmTaskMeasurement : NSObject

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

@property(nonatomic) MeasurementType MeasureType;

@end

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

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

taskMeasurement.MeasureType = (MeasurementType)N;

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我自己犯了这个错误,但错误是由于我当然创造了一个不同的错误。

我的属性“myApplicationState”的setter如下:

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

当然这会导致无限循环,因为在设置器中,再次,再次,再次调用设置。

必须是:

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