Use performSelector with three or more arguments?
Asked Answered
P

2

15

The various performSelector:... methods can handle a maximum of two arguments passed to the specified selector. What can I do if I need to pass three or more arguments?

Phares answered 5/10, 2011 at 12:9 Comment(2)
Yeah, if you have control over the callee side the simplest approach is to throw the parms into an NSDictionary. And even if you don't "own" the callee you can often make a "glue" routine in your own class to call it (assuming you're creating the selector, vs having it handed to you). Otherwise the NSInvocation approach is what you need.Ella
possible duplicate of performSelector with more than 2 objectsIntermigration
G
13

You need to use NSInvocation class for that. Check this SO question for more details on using them.

Gadget answered 5/10, 2011 at 12:12 Comment(0)
U
3

I dislike the NSInvocation way, it needs too much code.

If you’d like perform the selector immediately, here is an simple and clean way:

// Assume we have these variables
id target, SEL aSelector, id parameter1, id parameter2;

// Get the method IMP, method is a function pointer here.
id (*method)(id, SEL, id, id) = (void *)[vc methodForSelector:aSelector];

// IMP is just a C function, so we can call it directly.
id returnValue = method(vc, aSelector, parameter1, parameter2);
Uphroe answered 31/10, 2016 at 9:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.