2012-04-21 4 views
2

私は周りを見てきましたが、これを行う上で何かを見つけていないし、可能かどうかわからないが、これは私が達成しようとしているものです。注意してください、私は何をしようとしているの非常に簡単な例を与えています。また、掲載されたコードの類似性はすべて仮説的であり、コードの構文を修正するためのものではありません。これは、同様のタイプの機能を参照することによって、最終的な結果をさらに説明するのを助けることを意味します。だから、別の方法を提供する前に概念を理解してください...アクセスオブジェクト-c文字列名または変数でオブジェクト

と言われているように、私はオブジェクトにアクセスできるかどうかを確認しようとしていますが、文字列名または変数 ifステートメントを使用します。例えば、3つのウイラブルがあるとしましょう。

UILabel *label1; 
UILabel *label2; 
UILabel *label3; 

そこから適切な合成を行います。今のところ、私はsayとintを使ってラベルを参照したいと思っています。

int intNumber = 2; 

ここでは理論的な部分です。私は今、名前に一致するint値を持つラベルのテキストを設定したいと思います。 int型の値が1だった場合

label(%i, intNumber).text = [NSString stringWithFormat:@"This is Label %i", intValue]; 

結果は次のようになり...

label2.text = @"This is Label 2"; 

は、その後、LABEL1が変更されます。または3の場合はlabel3が変更されます。

またはラベルの文字列名を使用して同じ処理を実行できるかどうかを確認します。

int intValue = 1; 

NSString *labelName; 

は、いくつかの点で

labelName = [NSString stringWithFormat:@"label%i",intValue]; 

は今、何とかそれを呼び出すために「ラベル名」を参照してLABEL1のテキストを設定します。もし誰かがこのような何かを提案したりコメントしたりすることができれば、それは非常に高く評価されます。文字列名でクラスやセレクタを参照できますが、オブジェクトについてはわかりません。私は "valueForKey:"私はこれを行うために探している方法であるかどうかわからないのですか?

申し訳ありませんが、私は何をしたいのかを明確にしたいと思っていました。

+0

残念ながら、ivは実際にそれを理解しました。私はスタックオーバーフローの騒ぎであるので、私自身の質問にまだ答えることはできません。一度私はサンプルコードで答えを投稿することができます。もう一度ありがとう... – DoS

+0

[PHPの "変数変数"に相当する[Objective C]の重複可能性(http://stackoverflow.com/questions/2283374/objective-c-equivalent-of-phps-variable-variables)、http: //stackoverflow.com/questions/2231783/create-multiple-variables-based-on-an-int-count/、http://stackoverflow.com/questions/7940809/syntax-help-variable-as-object-name 、 –

+0

はい、それは似ていますが、明らかに正解ではありません。 – DoS

答えて

7

申し訳ありませんが、&ガルス、私はこれを考え出した。 "setValue:forKeyPath:"は私が必要としたものであることが判明しました。そう例えば...

example.h

@property (strong, nonatomic) UILabel *label1; 
@property (strong, nonatomic) UILabel *label2; 
@property (strong, nonatomic) UILabel *label3; 

例。m

@synthesize label1, label2, label3; 

- (void)someMethod:(int)labelVarInt { 

[self setValue:[NSString stringWithFormat:@"This is Label %i", labelVarInt] forKeyPath:[NSString stringWithFormat:@"label%i.text", labelVarInt]]; 

} 

これは、これと同様のことを行う必要がある他の人に役立ちます。

+0

hehe :) KVCは何ですか?Key Valueコーディング偉大なあなたの答えを得た! –

+0

はい、私はkvc&kvoが何であるか知っています。私はちょうど取る最良のアプローチを確信していませんでした。あなたが私の質問で "valueForKey:"方法について言及したことに気づいた場合。効率は重要であり、1つのラインは常に5-10を越える。多くの人々が同様の質問をしてきましたが、誰もこの単純な答えを投稿していません。 – DoS

2

大文字小文字がインデックスされた文字列の場合は、おそらく配列を使用する必要があります。そうでない場合は、イントロスペクションを探しています(this questionを参照)。

2

NSArrayにラベルを格納する必要があると思うと、インデックスでラベルにアクセスできます。

もう1つの方法は、KVCを使用してラベルを取得することです。

関連する問題