Как я могу передать значение 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];
}];
Вы можете передать все, что вы хотите в блоке таймера.