use*_*146 82 objective-c selector nsarray ios
我正在使用iPhone SDK(3.0),我正在尝试创建一个选择器数组,以在一个类中调用各种方法.
显然,我做错了(我认为@selector不被认为是一个类,因此将它们填充到NSArray中是行不通的).
我试过这个,但这显然是错的.
有一个简单的方法来拥有这样的选择器数组吗?或者是否有更好的方法来迭代一组方法?
selectors = [NSArray arrayWithObjects:
@selector(method1),
@selector(method2),
@selector(method3),
@selector(method4),
@selector(method5),
@selector(method6),
@selector(method7), nil];
for (int i = 0; i < [selectors count]; i++) {
if ([self performSelector:[selectors objectAtIndex:i]]) // do stuff;
}
Run Code Online (Sandbox Code Playgroud)
bli*_*sse 79
你能存储字符串并使用NSSelectorFromString吗?
来自文档
NSSelectorFromString
Run Code Online (Sandbox Code Playgroud)
返回具有给定名称的选择器.
SEL NSSelectorFromString (
NSString *aSelectorName
);
Run Code Online (Sandbox Code Playgroud)
Den*_*kem 42
这会从选择器中创建一个对象:
[NSValue valueWithPointer:@selector(x)]
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 35
为什么不使用简单的C数组呢?
static const SEL selectors[] = {@selector(method1),
....
@selector(method7)};
...
for (int i = 0; i < sizeof(selectors)/sizeof(selectors[0]); i++) {
[self performSelector:selectors[i]];
// ....
}
Run Code Online (Sandbox Code Playgroud)
Mor*_*ess 12
您还可以创建一个NSInvocation
s 数组.如果你需要一个参数来选择你的选择器,这很方便.
NSMethodSignature *sig = [[yourTarget class] instanceMethodSignatureForSelector:yourSEL];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:sig];
[inv setTarget:yourTarget];
[inv setSelector:yourSEL];
[inv setArgument:&yourObject atIndex:2]; // Address of your object
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18783 次 |
最近记录: |