Это опечатка или ваш код?
if ([self.superview respondsToSelector:@selector(buttonPressedClose)]) {
// vv here
[self.superview performSelector:@selector(buttonPressedCLose) withObject:nil afterDelay:0.0];
}
Как правило, self.superview
возвращает объект типа UIView
, а ваш buttonPressedClose
является пользовательским селектором, который не реализован в UIView
. Вот почему вы получаете предупреждение.
Возможно, вы захотите привести self.superview
к нужному вам типу, например ::
.
[(MyView *)self.superview buttonPressedClose];
или сделайте его еще более загадочным и приведите к id
- компилятор не проверяет наличие селекторов:
[(id)self.superview buttonPressedClose];
Тем не менее, все вышеперечисленные решения немного вонючие.
Одна очень важная вещь, связанная с performSelector:
с нулевой задержкой - она не выполняет селектор на месте, а скорее отправляет выполнение селектора в цикл выполнения потока и выполняет его, когда управление возвращается к выполнению цикл (т. е. когда стек вызовов пуст). Так что в нормальных ситуациях вы бы не хотели его использовать.