【问题标题】:Enumerated type as a static variable in Objective-C枚举类型作为 Objective-C 中的静态变量
【发布时间】:2014-07-01 18:45:48
【问题描述】:

我需要一个静态变量来保存枚举类型,以便其他类访问和更改。目前我可以访问它的值,但是当我尝试更改它时,不会存储新值。它声明的类没有被实例化。

这是枚举声明:

typedef NS_ENUM(NSInteger, weaponType) {
    single, dual
};

我在 .h 文件中声明了一个静态 getter 和 setter:

+(weaponType)shipWeaponType;
+(void)setShipWeaponType:(int)aType;

在 .m 文件中我有一个静态变量

static weaponType shipWeaponType;

而getter和setter的实现方式如下:

+ (weaponType)shipWeaponType {
    return shipWeaponType;
}
+ (void)setShipWeaponType:(int)aType {
    shipWeaponType = aType;
}

shipWeaponType 总是返回 0。我试过让 setShipWeaponType 需要一个实际的枚举类型而不是一个 int,但这没有区别。

任何帮助将不胜感激!

【问题讨论】:

  • 我已经尝试了您的代码,并且第一次尝试的返回结果为 1。你一定在某个地方犯了一些简单的错误。您引用的代码运行良好
  • 我的 Nil-Sense 有点刺痛。
  • @Chuck 但这些是类方法。一个类不能为零
  • @AndreyChernukha:你认为指向一个类的变量可以是 nil。确实,以对类的 nil 引用结束需要一些不寻常的选择,但这已经是一种奇怪的设计,很明显 something 奇怪的事情发生在这里(据报道)恰好像空引用一样工作。
  • @user2576824:鉴于没有人可以从您在此处提供的代码中重现此问题,因此需要提供更好的代码示例,如果您愿意,人们可以使用任何人都可以告诉你发生了什么事。

标签: objective-c enums static-members


【解决方案1】:

我怀疑您只是遗漏了一些明显的东西,因为您所拥有的似乎应该可以工作。我只是在默认精灵套件项目中的一个类中快速进行了测试,因为我打开了它,并且它工作正常。这是它的样子:

//=======  .h ==========
typedef NS_ENUM(int, testEnumType){
    nullType,
    oneType,
    twoType,
    initType,

};

@interface MyScene : SKScene

+(void)setStaticVar:(int)var;
+(testEnumType)getStaticVar;

//========= .m ==============
static testEnumType theStaticVar = initType;

@implementation MyScene

+(void)setStaticVar:(int)var
{
    theStaticVar = var;
}

+(testEnumType)getStaticVar
{
    return theStaticVar;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [MyScene setStaticVar:oneType];
    NSLog(@"the var: %i", [MyScene getStaticVar]); //result is the var: 1

}

【讨论】:

  • setter 似乎在方法中分配值,但是当再次访问该变量时,它已恢复为 0。我这样设置:[GameAdmin setShipWeaponType:dual]; - 和你的一样,所以我不明白为什么我的不起作用。
  • 首先,当您声明静态变量时,将其设置为 0 以外的值,这将帮助您了解您是否正在查看对它的一些晦涩的 nil 引用,或者该值是否实际上正在恢复。但我会检查你的用例,以确保我没有遗漏任何东西。编辑 - 不,一切都适用于所有情况。你要么指向一个类的 nil 引用,要么你在其他地方设置值,或者没有像你想象的那样设置它。确保在每一步都使用 NSLog。
  • 我用一些 NSLogs 弄明白了。在我用来设置变量的类从 CCB 加载之前,我正在访问从 CCB 加载的变量的类。感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 2010-12-10
  • 2012-01-26
  • 1970-01-01
相关资源
最近更新 更多