0

self.label1、などでプロパティ名を取得したいのですがself.label2self.label3NSStringをJSやRubyなどのメソッドに変換する方法を知っていますか。

私のヘッダーは

@property(nonatomic,strong)CCLabelTTF *label1;
@property(nonatomic,strong)CCLabelTTf *label2;...

実装

for (int i = 0; i < 10; ){

  NSString *str = [NSString stringWithFormat:@"self.label%i",i];
  // convert str to property
  converted_str = [CCLabelTTF labelWithString:%@"hello  below style is  not good...

このスタイルは避けたい...

for(int i  = 0 ;i < 10;){
   if (i == 0){
   self.label1 = ...
   }else if(i == 1){
   self.label  = ...
}

何か考えはありますか?前もって感謝します。

4

4 に答える 4

4

ラベルを次のような配列に入れてみませんか。

NSArray *myLabels = @[self.label1, self.label2...];

次に、次のことができます。

for (CCLabelTTF *label in myLabels) {
    // Do something with the label
}

または、KVCを利用することもできます。

for (int i = 1; i <= 10; i++) {
    NSString *labelName = [[NSString alloc] initWithFormat:@"label%d", i];
    CCLabelTTF *label = [self valueForKey:labelName];
    // Do something with the label
}
于 2012-08-23T20:17:47.130 に答える
2

KVCを使用してみてください。

NSString *keyPath = [NSString stringWithFormat:@"label%i", labelNumber];

id value = [CCLabelTTF ....];

[self setValue:value forKey:keyPath]; // use KVC to set the value for you
于 2012-08-23T20:17:25.580 に答える
0

これはKey-Valueコーディングで行うことができますが、実際には配列を使用する必要があるように思えます。アレイを使用していない理由が、これらが接続する必要のあるアウトレットであるためである場合は、アレイをとして宣言するだけで機能しIBOutletCollectionます。

于 2012-08-23T20:19:12.163 に答える
0

さて、KVC角度のより原始的な形は次のようになります:

SEL sel = NSSelectorFromString(propertyName);
id leProperty = [object performSelector:sel];

ただし、KVCの方が徹底的であり、このメソッドを使用して入力を間違えると、例外がスローされます。同様に、performSelector:ARCにはあまり適していません。

これより低くしたい場合は、objcランタイムを使用していつでもこれを行うことができます。

于 2012-08-23T20:31:19.863 に答える