文字列からセレクター 引数がある場合 - NSSelectorFromString 2010/09/02

Objective-Cです。NSSelectorFromStringです。
文字列からセレクターを作成して利用します。その際に、呼び出すメソッドに引数がある場合についてです。
一時間ぐらいはまったのでメモ。
ようはコロン(:)を忘れずにです。

プログラマメモ2: 文字列からセレクターを作成する - NSSelectorFromString

以下サンプルコードです。

#import <Foundation/NSString.h>
#import <Foundation/NSAutoreleasePool.h>

@interface MyObj : NSObject {

}
- a1:(id)arg;
- a2:(id)arg;
- a3:(id)arg;
@end

@implementation MyObj

- a1:(id)arg;
{
NSLog(@"** a1[%d]", [arg intValue]);
}
- a2:(id)arg
{
NSLog(@"** a2[%d]", [arg intValue]);
}
- a3:(id)arg
{
NSLog(@"** a3[%d]",[arg intValue]);
}
@end

int main(){

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

id myObj = [MyObj alloc];

// NSSelectorFromStringを使ってるよ
// 引数がある場合は:を付ける!!
SEL sel1 = NSSelectorFromString(@"a1:");
// performSelectorを使ってるよ
//(1) SELを使ってます
[myObj performSelector:sel1 withObject:(id)nil];
//(2)@selectorを使ってます
[myObj performSelector:@selector(a2:) withObject:[NSNumber numberWithInt:2]];
//(3)直にNSSelectorFromStringを使ってます
[myObj performSelector:NSSelectorFromString(@"a3:") withObject:[NSNumber numberWithInt:3]];

[pool drain];
return 0;
}

: