iphoneiosselectorperformselector

iOS - How to implement a performSelector with multiple arguments and with afterDelay?


I am an iOS newbie. I have a selector method as follows -

- (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second
{

}

I am trying to implement something like this -

[self performSelector:@selector(fooFirstInput:secondInput:) withObject:@"first" withObject:@"second" afterDelay:15.0];

But that gives me an error saying -

Instance method -performSelector:withObject:withObject:afterDelay: not found

Any ideas as to what I am missing?


Solution

  • Personally, I think that a closer solution to your needs is the use of NSInvocation.

    Something like the following will do the work:

    indexPath and dataSource are two instance variables defined in the same method.

    SEL aSelector = NSSelectorFromString(@"dropDownSelectedRow:withDataSource:");
    
    if([dropDownDelegate respondsToSelector:aSelector]) {
        NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[dropDownDelegate methodSignatureForSelector:aSelector]];
        [inv setSelector:aSelector];
        [inv setTarget:dropDownDelegate];
    
        [inv setArgument:&(indexPath) atIndex:2]; //arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
        [inv setArgument:&(dataSource) atIndex:3]; //arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
    
        [inv invoke];
    }