1

我想在我的 iOS 应用程序的 Constants Singleton 类中设置我的全局常量值,以便任何导入常量的类都可以使用这些值。

然而,在这个想法玩了几个小时之后,我仍然无法让它发挥作用。

在我的 Constants.m 文件中

 @interface Constants()
 {
    @private
    int _NumBackgroundNetworkTasks;
    NSDateFormatter *_formatter;
 }
 @end

 @implementation Constants

 static Constants *constantSingleton = nil;
 //Categories of entries
 typedef enum
 {
   mapViewAccessoryButton = 999

  } UIBUTTON_TAG;


 +(id)getSingleton
 {

   .....
  }

我有另一个类 MapViewController ,其中我有对常量单例的引用,我试图像这样访问枚举

 myDetailButton.tag =  self.constSingleton.UIBUTTON_TAG.mapViewAccessoryButton;

但是,这是行不通的。我无法访问 mapviewcontroller 内的 UIBUTTON_TAG

有人有什么建议吗?

谢谢

4

2 回答 2

3

如果您希望枚举在整个应用程序中可用,请将枚举定义放在 .h 文件中,而不是 .m 文件中。

更新

Objective-C 不支持命名空间,也不支持类级常量或枚举。

该行:

myDetailButton.tag =  self.constSingleton.UIBUTTON_TAG.mapViewAccessoryButton;

应该:

myDetailButton.tag =  mapViewAccessoryButton;

假设您UIBUTTON_TAG在某个 .h 文件中定义枚举。

当你编译一个 Objective-C 应用程序时,所有枚举的所有值都必须具有唯一的名称。这是 Objetive-C 基于 C 的结果。

更新 2

有一种方法可以得到你想要的东西,但不是用枚举。像这样的东西应该工作:

常量.h:

@interface UIBUTTON_TAG_ENUM : NSObject

@property (nonatomic, readonly) int mapViewAccessoryButton;
// define any other "enum values" as additional properties

@end

@interface Constants : NSObject

@property (nonatomic, readonly) UIBUTTON_TAG_ENUM *UIBUTTON_TAG;

+ (id)getSingleton;

// anything else you want in Constants

@end

常数.m

@implementation UIBUTTON_TAG_ENUM

- (int)mapViewAccessoryButton {
    return 999;
}

@end

@implementation Constants {
    int _NumBackgroundNetworkTasks;
    NSDateFormatter *_formatter;
    UIBUTTON_TAG_ENUM *_uiButtonTag;
}

@synthesize UIBUTTON_TAG = _uiButtonTag;

- (id)init {
    self = [super init];
    if (self) {
        _uiButtonTag = [[UIBUTTON_TAG_ENUM alloc] init];
    }

    return self;
}

// all of your other code for Constants

@end

现在你可以这样做:

myDetailButton.tag =  self.constSingleton.UIBUTTON_TAG.mapViewAccessoryButton;

我不确定这是否有道理。

于 2013-02-16T20:40:18.517 回答
1

如果您不打算大量更改枚举,则一种方法是简单地将其粘贴到您的预编译头文件 (.pch) 中。

于 2013-02-16T20:34:25.627 回答