2012-08-09 103 views
1

在我的应用程序中,我想减少如果检查的数量,所以我决定这种方式是最好的,但我不知道如何去做。从NSString获取变量?

所以我有一堆的#define的,它们分别是:状态1,状态2,状态3,等等

反正我有UIButtons与标签1按钮的图像是由状态1确定,等等......

反正我现在我的地方,我做这样的事情了一点:

NSString *variableString = [NSString stringWithFormat:@"state%i", theButton.tag]; 

所以现在我如何才能像NSString的状态1或状态2或状态3变量,我只是得到?

回答

3

使用带有@“state1”,@“state2”...等字符串的NSDictionary作为键和对图像的匹配引用作为键的对象。

+0

我不能这样做,我必须这样做。我知道这是可能的。 – 2012-08-09 22:23:37

+0

我会有兴趣了解如何。我只习惯Perl,shell脚本等语言。 – 2012-08-09 22:31:06

0
const int value = [[someString substringFromIndex:nCharsToTrim] intValue]; 

或者,您也可以通过访问字符来避免不必要的字符串创建值-[NSString characterAtIndex:]

(你或许应该避免使用0在这种情况下有效的状态值)

+0

我很困惑这将如何工作。假设我们有一个NSString,它表示:state1(但是在NSString形式中),上面的代码会将变量的值转换为变量形式的state1? – 2012-08-09 22:42:49

+0

我的例子只是将它转换回'tag'。您需要使用'tag'值来标识所讨论的视图中的视图(当然,该标记必须是唯一的)。 – justin 2012-08-09 22:53:06

+0

这是行不通的。我不仅需要数字,而且还需要前面的文字。我开始意识到Obj-C无法实现这一点。 – 2012-08-09 22:57:29

2

您可以使用:

[self valueForKey:variableString]; 

然而如果字符串值不匹配一个变量或一个属性,这个调用会抛出一个异常。您可以用@try { ... } @catch ...块捕获异常。如果你没有捕捉并处理异常,你的应用程序将失败。

+0

不能使用这个,我需要一种方式来以某种方式把我的NSString变成一个变量。我不在寻找解决方法(我的意思不是听起来很刺耳) – 2012-08-09 23:09:50

+0

@iBradApps - 您是否希望动态创建带有从字符串中取得的名称的变量?我知道你正试图访问一个现有的变量,'valueForKey'和相应的'setValue:forKey'就是这样 - 你有一个通过字符串访问的“变量”。 (还有'setValue:forUndefinedKey:'和'valueForUndefinedKey:'你可以实现处理缺少的变量。)我很想知道你实际上试图做什么,因为我显然误解了...... – CRD 2012-08-10 02:20:54