簡體   English   中英

iOS Private API performSelector崩潰

[英]iOS Private API performSelector crash

基本上,我想獲取UIButton的動作目標列表。 我已經經歷了這個問題,我的問題略有不同,因為我不知道目標是什么。 我所擁有的只是一個UIButton對象。 因此,這就是我捕獲所有行動目標的方式。

受以下方法啟發,該方法在將firstResponder對象用作有效指針的地方起作用。

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

我在UIKit上使用了class-dump來查看UIWindow類,並發現如下的firstResponder。

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

然后我檢查了UIControl通過class-dump作為

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

所以這是我嘗試做的事,它崩潰了。

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

聽起來像是對我的陰謀。 但是我更有可能搞砸了一些事情。 有什么知道如何訪問UIControl的targetActions數組嗎?

編輯:這是錯誤消息-

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

任何幫助表示贊賞。

根據UIControl文檔 ,發送以獲取目標列表的消息是allTargets而不是您建議的targetActions。 解決方案的其余部分在如何獲得UIButton Target,Action和Control事件的公認答案中

當您不知道自己在做什么時,可以使用的調試技術是使用responsesToSelector來檢查您是否正在發送對象可以響應的消息: 在objective-c中何時使用responsToSelector

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM