I have a general routine, which takes a few parameters.
Something like:
-(id) doStuff:(int)A:(int)B:(int)C {
//doStuff
return object;
}
I have a UITableViewController, which houses a number of custom cells, each with their own ID. When ‘Save’ is hit, these cells are iterated and some cells need ‘additional behaviour’ when they are being saved.
Up to now, I’ve created a ‘Callback’ object, which stores an NSString * and a delegate in the custom cell. Upon being ‘Saved’, the cell looks, whether it has any callbacks to apply and uses
SEL sel = NSSelectorFromString(Sel);
if([Del respondsToSelector:sel])
[Del performSelector:sel withObject:Cell];
Now that works somewhat well…, however, it requires the method I pass to do a switch/case on the ID of the Cell that’s passed, and I’d like to avoid that.
That’s why I’d like to use blocks instead, but I don’t really know how to store a parameterized block in a variable.
What I’m trying to do:
Declare a function block doStuff.
id (^doStuff) (int, int, int) = ^(int A, int B, int C) {
//does Stuff
};
And add the previously created block as callback
[Cell addCallback:(^doStuff)(1, 2, 3)];
The block must NOT be called at that moment, but stored in the cell and only called it when the time is right.
How would I go about this correctly?
Thank you very much.
Edit: What I’d also like to avoid is storing the parameters for the block in the cell and pass them upon calling, because that would require me to further specialize the cells unnecessarily.
It sounds like what you want is a block that calls your block, something like this:
But this is a rather odd and convoluted design. It seems like there is probably a way to write it with only one block, but it’s hard to give a solution that specific without a better idea of what you’re doing.