views:

665

answers:

3

Hi, i'm using the iphone sdk (3.0) and i'm trying to create an array of selectors to invoke a variety of methods within one class.

Obviously, I'm doing something wrong (I think @selector isn't considered a class and so stuffing them into an NSArray isn't working).

I tried this, but it's obviously wrong.

Is there a simple way to have an array of selectors like this? Or is there a better way to iterate through a collection of methods?

Thanks for any insight!!

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;
}
+8  A: 

Could you store strings and use NSSelectorFromString?

From the docs

NSSelectorFromString

Returns the selector with a given name.

SEL NSSelectorFromString (
   NSString *aSelectorName
);
blindJesse
sounds good to me. thx!
+4  A: 

This creates an object out of selector:

[NSValue valueWithPointer:@selector(x)]
DenNukem
+5  A: 

Why not just use a simple C array?

static const SEL selectors[] = {@selector(method1),
                                ....
                                @selector(method7)};

...

for (int i = 0; i < sizeof(selectors)/sizeof(selectors[0]); i++) {
  [self performSelector:selectors[i]];
  // ....
}
KennyTM