在实现某些like例如
时,我遇到了奇怪的编译问题作品:
[self performSelector:NSSelectorFromString(member)];
不工作:
SEL method=NSSelectorFromString(member);
[self performSelector:method];
编译器哭泣:
methods.m:31: error: expected expression before ‘SEL’
methods.m:32: error: ‘method’ undeclared (first use in this function)
methods.m:32: error: (Each undeclared identifier is reported only once
methods.m:32: error: for each function it appears in.)
完整的方法:
- (void)printArgs:(NSString *)member
{
//int val=[self compareIt:member];
switch ([self compareIt:member])
{
case 1:
//dynamically call method
SEL method;
method = NSSelectorFromString(member);
NSLog(@"\n%@ is a object Member , with value: %i\n", member, [self performSelector:method]);
break;
default:
NSLog(@"\nWrong option :%@ \n", member);
}
}
@end
请指出正确的方向。(请注意我是Objective-C的新手)
答案 0 :(得分:2)
它实际上是一个C问题而不是Objective-C问题。它不喜欢在case
内定义变量而不限制其范围。
这应该有效:
case 1: {
//dynamically call method
SEL method;
method = NSSelectorFromString(member);
NSLog(@"\n%@ is a object Member , with value: %i\n", member, [self performSelector:method]);
}
break;