Частное API iOS выполнить аварийное завершение выборки

По сути, я хочу получить список целей для UIButton. Я прошел через это, и мой вопрос немного отличается, потому что я не знаю, какова цель. Все, что у меня есть, это объект UIButton. Итак, вот что я сделал, чтобы захватить все цели действий.

Вдохновленный методом ниже, который работает, где я получаю объект firstResponder в качестве действительного указателя.

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView   *firstResponder = [keyWindow performSelector:@selector(firstResponder)];

Я использовал class-dump на UIKit, чтобы увидеть класс UIWindow, и я нашел firstResponder, как показано ниже.

 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIWindow : UIView {
  @package
    UIResponder             *_firstResponder;
}

Затем я проверил UIControl, который через класс-дамп как

NS_CLASS_AVAILABLE_IOS(2_0) @interface UIControl : UIView {
  @package
     NSMutableArray* _targetActions;
 }

Итак, вот что я пытаюсь сделать, и это вылетает.

    NSMutableArray *arr = (NSMutableArray*)[((UIControl*)btn) performSelector:@selector(targetActions)];
    NSLog(@"%@",arr);

Звучит как заговор против меня. Но, скорее всего, я кое-что обманываю. Кто-нибудь знает, как получить доступ к массиву targetActions из UIControl?

РЕДАКТИРОВАТЬ: Вот сообщение об ошибке -

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-    [UIRoundedRectButton targetActions]: unrecognized selector sent to instance 0x1c0ab0'

Любая помощь приветствуется.

1 ответ

Решение

Согласно документации UIControl, сообщение, которое нужно отправить для получения списка целей, это allTargets, а не targetActions, как вы предлагаете. Остальная часть решения находится в принятом ответе на Как получить события UIButton Target, Action и Control?

Техника отладки, которую вы можете использовать, когда вы не знаете, что делаете, - это использовать responsedsToSelector, чтобы проверить, отправляете ли вы сообщение, на которое может ответить объект: когда использовать responsedsToSelector в target-c

Другие вопросы по тегам