how can i pass an int value through a selector method?

后端 未结 3 1787
孤城傲影
孤城傲影 2020-12-15 09:34

I want to pass an int value from my selector method, but the selector method takes only an object type parameter.

int y =0;
[self performselecto         


        
相关标签:
3条回答
  • 2020-12-15 10:07

    The easiest solution, if you 'own' the target selector, is to wrap the int argument in an NSNumber:

    -(int)tabledata:(NSNumber *)_cellnumber {
        int cellnumber = [_cellnumber intValue];
        ....
    }
    

    To call this method you would use:

    [self performselector:@selector(tabledata:) withObject:[NSNumber numberWithInt:y] afterDelay:0.1];
    
    0 讨论(0)
  • 2020-12-15 10:09

    This works also for an int parameter, which is especially useful, if you are unable to change the signature of the selector you want to perform.

    SEL sel = @selector(tabledata:);
    
    NSMethodSignature *signature = [[self class] instanceMethodSignatureForSelector:sel];
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
    invocation.selector = sel;
    // note that the first argument has index 2!
    [invocation setArgument:&y atIndex:2];
    
    // with delay
    [invocation performSelector:@selector(invokeWithTarget:) withObject:self afterDelay:0.1];
    
    0 讨论(0)
  • 2020-12-15 10:12

    Instead of your performSelector:withObject:afterDelay:, use an NSTimer, thusly:

    int y = 0;
    [NSTimer scheduledTimerWithTimeInterval:0.1 repeats:NO block:^(NSTimer *timer) {
        [self tabledata:y];
    }];
    

    You can pass whatever you want in the timer block.

    0 讨论(0)
提交回复
热议问题