2011-06-17 4 views
0

NSArrayのポインタ名としてNSStringの内容を使用する方法はありますか?これは利用できない可能性がありますが、多分このような何かに別の方法がある:NSStringの内容をNSArrayの名前として使用する

NSString*[email protected]"hi"; 
NSString*[email protected]"yo"; 

NSArray*testarray=[[NSArray alloc] initWithObjects:one, two, nil]; 

NSLog(@"actual count: %i", [testarray count]); 

NSString*[email protected]"testarray"; 
NSLog(@"test count: %i",[ --insert here to get array name from testname-- count]); 

私は私は私のtestnameとして配列名を使用するためにそこに挿入することができるもののために推測の様々な試みましたカウント操作ではなく、ダイスはありません。私はそれが少し奇妙であることを知っているが、私はこれを行うための非常に多くの有用な理由を予見することができ、私は今別のアプリで1つを持っています。

答えて

1
NSString*[email protected]"hi"; 
NSString*[email protected]"yo"; 

NSDictionary *testDic=[NSDictionary dictionaryWithObjectsAndKeys: 
       [NSArray arrayWithObjects:one, two, nil], 
       @"testarray" ,nil]; 

NSLog(@"actual count: %i", [testarray count]); 

NSString*[email protected]"testarray"; 
NSLog(@"test count: %i",[[testDic objectForKey:testname] count]); 
+0

これはそうすると思います。私はそれを試してみましょう。 – johnbakers

0

私はそれはあなたが必要なものですかどうかわからないんだけど、...

あなたは、その名前でメソッドを呼び出すことができます。

NSString *methodName = @"..."; 
SEL selector = NSSelectorFromString(methodName); 
[objectRef performSelector:selector]; 

この方法は、あなたの配列への参照を返すことがあります。このように動作するはずです。

+0

これは行く方法ですが、これはコストがかかります:KVCを使用して、その名前でivarを取得すると、より良いパフォーマンスが得られるはずです。 – AliSoftware

2

これにキーバリューコーディングを使用できます(Key Value Coding Programming Guideを参照)。

とにかくこの種のコードを実行することは、あなたの質問のように - 一般的には悪い設計です。これを行う必要がある場合は、コードデザインを確認することを検討する必要があります(稀なケースは唯一の方法かもしれませんが、少なくともこれが唯一の解決策であることを確認する必要がある場合)。

KVCの使用は、モデルやそのような特定のものへの値のバインドには本質的に便利ですが、代わりに直接ivars/@プロパティを避けて使用することができれば、一般的に好まれない方法です。

+0

ありがとう、私はそれをチェックします。私はソリューションがZhangChnも提供しているのが好きです。 – johnbakers