2011-04-04 6 views
1

の名前にNSStringの変換:私はこのように宣言定数の束を持っている定数

#define kConstant0 @"Cow" 
#define kConstant1 @"Horse" 
#define kConstant2 @"Zebra" 

他の場所コードで私は、文字列名に整数を追加することにより、一定の値を抽出しようとしています定数:

int myInt = 1; // (Actual intValue Pulled From Elsewhere) 
myLabel.text = [@"kConstant" stringByAppendingString:[NSString stringWithFormat:@"%i",myInt]]; 

しかし、もちろん、これは返す:

myLabel.text = @"kConstant1"; 

私はそれを返すようにしたいときは:

myLabel.text = @"Horse"; 

NSString @ "kConstant1"を定数名kConstant1に変換する方法がわかりません。

何か助けていただければ幸いです。 lq

答えて

2

自動的には実行できません。 NSDictionaryにマッピングを格納する必要があります(例:

@implementation MyClass 
static NSDictionary* constants; 
+(void)initialize { 
    constants = [[NSDictionary alloc] initWithObjectsAndKeys: 
            @"kConstant0", @"Cow", 
            @"kConstant1", @"Horse", ..., 
            nil]; 
} 
... 

NSString* constantName = [kConstant stringByAppendingString:...]; 
myLabel.text = [constants objectForKey:constantName]; 

これらすべての定数は、フォームkConstantNのであれば、それだけで配列を作成することをお勧めします。

static NSString* kConstants[] = {@"Cow", @"Horse", @"Zebra", ...}; 
... 

myLabel.text = kConstants[i]; 
+0

それは、おかげで、多くのおかげです。 NSString形式ではあるが、既に定数の名前があるので、これを行うために別の配列を作成する必要がなくなりました。 –

4

答えは、定数を定義するための定義を避けることです。代わりに、このようなNSString定数を使用します。

NSString * const constant1 = @"Cow"; 

大きなメリットは、今の定数が型を持ち、より良い安全性を入力するに関してであるということです。

+0

アドバイスをいただきありがとうございます。私の次の努力のための良いヒント。 –

+0

デバッグするのがずっと簡単で、はるかに洗練されています。回答をアップアップしてください;-)。 – GorillaPatch

関連する問題