【问题标题】:Assign Enum to Variable in Objective-C在 Objective-C 中将枚举分配给变量
【发布时间】:2013-06-01 17:31:23
【问题描述】:

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

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

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];

【问题讨论】:

  • 显示对 setupBarStyle 方法的调用
  • @Wain 当然会!我对我的问题进行了编辑(编辑 #1)
  • 编译并运行您的代码,没有任何崩溃。请添加崩溃日志。

标签: enum ios objective-c enums runtime-error


【解决方案1】:

你实现的方法叫做setupBarStyle:,但是你在对象上调用setupBarShape:

【讨论】:

  • 抱歉,我将方法调用转移到我的问题时打错了。我已经修好了
  • @RazorSharp(我总是想知道复制粘贴怎么可能导致这样的错别字......)
【解决方案2】:

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

在头文件中...

@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;

【讨论】:

    【解决方案3】:

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

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

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

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

    必须是:

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

    【讨论】:

      猜你喜欢
      • 2014-09-20
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多