[英]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.