Q:

Achieve method with passed variables in @selector

Where this:
distanceTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(applyShot:newPositionOne.x with:newPositionOne.y) userInfo:nil repeats:NO];

^^ This doesn't work. 
Must equal this 
[self applyShot:newPositionOne.x with:newPositionOne.y];

I basically need a delay before running this method, and it passes the variables because they'll be different by the time the method runs, so it has to remember them somehow. 
However, I cannot for the life of me figure out how to pass variables in an @selector. 
I've done it before with button.tag for example, but never for this. 
Any help will be appreciated, thank you. 
I understand I can just set global variables, but is is possible to pass them? 

A:

A selector is not a packaged method.  A selector is just the name of a message.  You can think of it as a string (it used to be implemented as a string). 
The traditional way to address this is with an NSInvocation which packages up a complete method call, not just the name of the message.  That's well covered by Arguments in @selector.  The other way to handle it is to package your options into the userInfo and change your method to read its parameters from that. 
But typically the better solution today is to use dispatch_after instead:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC),
               dispatch_get_main_queue(),
               ^(void){
                   [self applyShot:newPositionOne.x with:newPositionOne.y];
                });

