Как я могу передать значение int с помощью селекторного метода?

Я хочу передать значение int из моего метода выбора, но метод select принимает только параметр типа объекта.

int y =0;
[self performselector:@selector(tabledata:) withObject:y afterDelay:0.1];

Выполнение способа здесь

-(int)tabledata:(int)cellnumber {
   NSLog(@"cellnumber: %@",cellnumber);
   idLabel.text = [NSString stringWithFormat:@"Order Id: %@",[[records objectAtIndex:cellnumber] objectAtIndex:0]];
}

но я не получаю точное целочисленное значение в моем методе, я получаю только значение id.

Ответ 1

Самое простое решение, если вы "владеете" целевым селектором, состоит в том, чтобы обернуть аргумент int в NSNumber:

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

Чтобы вызвать этот метод, вы должны использовать:

[self performselector:@selector(tabledata:) withObject:[NSNumber numberWithInt:y] afterDelay:0.1];

Ответ 2

Это также работает для параметра int, что особенно полезно, если вы не можете изменить подпись селектора, который хотите выполнить.

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];

Ответ 3

Вместо вашего executeSelector: withObject: afterDelay: используйте NSTimer, таким образом:

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

Вы можете передать все, что вы хотите в блоке таймера.