在运行时修改目标c中的常量

时间:2012-10-25 04:55:15

标签: iphone objective-c ios xcode constants

我正在尝试解决以下问题。我的头文件中有以下常量:

#define PREFS_MY_CONSTANT_1 @"bla1"
#define PREFS_MY_CONSTANT_2 @"bla2"
#define PREFS_MY_CONSTANT_3 @"bla3"
...

在我的一个函数中,我想根据用户输入打印到UI按钮中的一个字符串,所以说用户输入'1',我会显示bla1。而不是创建一个巨大的开关(我有100个),我正在寻找一种方法来将常量与保存用户输入的变量结合起来,所以理想情况下这样:

NSInteger input;
[button setTitle:PREFS_MY_CONSTANT_{$input} forState: UIControlStateNormal];

这样的事情可能吗?什么是解决这个问题的最好方法?

3 个答案:

答案 0 :(得分:4)

我定义了一个NSString文字的普通C数组:

static NSString *prefs[] = {
    @"foo",
    @"bar",
    @"baz",
};

要么使用基于0的索引,要么将某些内容放在您不会使用的第一个条目中,例如nil。然后prefs[input]将为您提供所需的字符串。

(最后一个条目后的逗号不是错误。它允许您添加更多条目而无需先添加逗号。它使编辑更容易,并使修订历史更容易阅读。)

可以在编译时确定静态数组中的元素数。我通常使用一个宏:

#define ARRAYSIZE(array) (sizeof(array) / sizeof(array[0]))

然后,您可以将用户输入与ARRAYSIZE(prefs)进行比较,以确保其保持在范围内。

答案 1 :(得分:2)

另一种方法是使用NSArray

创建一个这样的数组:

NSArray *titleArray = [[NSArray alloc] initWithObjects:@"bla1",@"bla2",@"bla3", nil];

您可以按照以下方式设置按钮标题:

[button setTitle:[titleArray objectAtIndex:input] forState: UIControlStateNormal];

答案 2 :(得分:0)

为此,NSString

NSString *input = [NSString stringWithFormat:@"PREFS_MY_CONSTANT_%@",input];
[button setTitle:input forState: UIControlStateNormal];

          or
 [button setTitle:[NSString stringWithFormat:@"PREFS_MY_CONSTANT_%@",input] forState:     UIControlStateNormal];

让我知道它是否有用。

谢谢和问候, 阿尼尔