3

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

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

typedef enum {
    BarStyleGlossy,
    BarStyleMatte,
    BarStyleFlat
} BarDisplayStyle;

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

//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,但是如果我遵循传统的变量设置和分配等,这应该可以工作。关于我做错了什么的任何想法?

请注意,我是enums 的新手,所以我在这里的词汇可能有点混乱(请原谅我 - 如果您知道我想说什么,请随时进行编辑)。

enums在网上找到了一些参考资料:

编辑:这是我调用该setupBarStyle方法的方式:

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

3 回答 3

10

以防万一有人仍然试图弄清楚如何将枚举值分配给枚举类型的变量或属性......这是一个使用属性的示例。

在头文件中...

@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;
于 2014-05-06T14:01:10.090 回答
0

您实现的方法被调用setupBarStyle:,但您调用setupBarShape:对象。

于 2013-06-05T21:02:00.270 回答
0

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

我的属性“myApplicationState”的设置器如下:

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

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

它必须是:

-(void)setApplicationStyle:(myApplicationStyle)applicationStyle{
    _applicationStyle = applicationStyle;
    //some more code
}
于 2015-04-30T08:05:42.270 回答