こんにちは、Objective Cは初めてで、誰かがこれを手伝ってくれるのではないかと考えていました。それぞれ3つの入力値を必要とするいくつかの異なるメソッドがあり、通常は
[self methodA:1 height:10 speed:3]
しかし、plistの文字列から読み取りたいメソッド名なので、たとえば、文字列がmethodBの場合、次のようになります。
[self methodB:1 height:10 speed:3]
「methodC」の場合
[self methodC:1 height:10 speed:3]
等々。
これをどのように行うかについてのアイデアは、NSSelectorFromStringを使用して文字列をセレクターとして定義してみました
NSString *string = [plistA objectForKey:@"method"];
SEL select = NSSelectorFromString(string);
[self performSelector:select:c height:b speed:a];
しかし、これはうまくいきませんでした。助けていただければ幸いです。以下の解決策を試しましたが、ここで動作することができませんでしたが、私が試したものです。
要約すると、次のような方法があります。
spawnEnemyA:2 withHeight:3 withSpeed:4
spawnEnemyB:3 withHeight:2 withSpeed:5
そして、これらのメソッドに渡したい値と、plistファイルからメソッドタイプを読み取りたいと思います。私のコードは次のとおりです。 //////////////////
//これらは、メソッドで使用するplistから読み取った値です
int a = [[enemySettings objectForKey:@"speed"] intValue];
int b = [[enemySettings objectForKey:@"position"] intValue];
int c = [[enemySettings objectForKey:@"delay"] intValue];
// I Also read the method name from the plist and combine it into a single string
NSString *method = [enemySettings objectForKey:@"enemytype"];
NSString *label1 = @"spawn";
NSString *label2 = @":withHeight:withSpeed:";
NSString *combined = [NSString stringWithFormat:@"%@%@%@",label1, method,label2];
//Check that the string is correct get spawnEnemyA:withHeight:withSpeed:
CCLOG(@"%@",combined);
//This is the Invocation part
NSInvocation * invocation = [ NSInvocation new ];
[ invocation setSelector: NSSelectorFromString(combined)];
[ invocation setArgument: &c atIndex: 2 ];
[ invocation setArgument: &b atIndex: 3 ];
[ invocation setArgument: &a atIndex: 4 ];
[ invocation invokeWithTarget:self ];
[invocation release ];
////////////////////////////////////////////////// //////////////////
コードはエラーなしでコンパイルされますが、メソッドは呼び出されません。何か案は?乾杯