0

I have strange compilation issue while implementing sth like e.g

Works :

  [self performSelector:NSSelectorFromString(member)];

Not Working :

  SEL method=NSSelectorFromString(member);
  [self performSelector:method];

Compiler crying with:

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.)

complete method:

 - (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

Please point me in right direction.(please note I am new to Objective-C)

Community
  • 1
  • 1
sakhunzai
  • 13,900
  • 23
  • 98
  • 159

1 Answers1

2

It's actually a C problem rather than an Objective-C one. It doesn't like having variables defined within a case without having their scope constrained.

This should work:

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;
Phillip Mills
  • 30,888
  • 4
  • 42
  • 57