文字列からセレクター 引数がある場合 - NSSelectorFromString
2010/09/02
cocoa
objective-c
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;
}
#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;
}
: