ios – 在respondsToSelector检查后,doNotRecognizeSelector错误

简短说明:当对象的调用方法肯定有这个方法并且在调用respondsToSelector之后发生时,我得到了doesNotRecognizeSelector错误.

这是一个非常奇怪的情况,我不明白它是如何:).我在一些用户设备的日志中看到了这个错误,但在所有用户设备上都看不到.我不能在我自己的设备上重复这个.

我试图找出它是如何发生的,并使用respondsToSelector添加条件,但问题再次发生.

一些代码吼叫.希望能帮助到你

1)我在AppDelegate中有viewController对象.

@interface AppDelegate : NSObject <UIApplicationDelegate> {
}
@property (nonatomic, retain) AdRootViewController *viewController;
...
@end

@implementation AppDelegate
@synthesize viewController;
...
@end

2)在其他类中,我试图获取此对象并调用其中一个方法.但是在[viewController showBanner]上调用all失败并出现了doesNotRecognizeSelector错误.

- (void) onEnterTransitionDidFinish {
    [super onEnterTransitionDidFinish];

    AdRootViewController *viewController = [(AppDelegate *)[[UIApplication sharedApplication] delegate] viewController];
    if (viewController != nil && [viewController respondsToSelector:@selector(showBanner)]) {
        [viewController showBanner];
    }
}

3)AdRootViewController有这个方法,它在接口中声明.

@interface AdRootViewController : UIViewController {
}
- (void)showBanner;
...
@end

@implementation AdRootViewController
...
- (void)showBanner
{
    adBannerViewIsVisible = YES;
    ...
}
...
@end

失败的代码串是[viewController showBanner].

错误日志如下所示:

1 CoreFoundation __exceptionPreprocess + 1245624
2 libobjc.A.dylib objc_exception_throw + 34136
3 CoreFoundation -[NSObject(NSObject) doesNotRecognizeSelector:] + 1274468
4 CoreFoundation ___forwarding___ + 1262188
5 CoreFoundation _CF_forwarding_prep_0 + 186376
6 <project_id> 4296487336 + 487848
...

附:可能是堆栈跟踪会更好地显示它:
《ios – 在respondsToSelector检查后,doNotRecognizeSelector错误》

最佳答案 我意识到有一种非常罕见的情况会发生这种情况.

在越狱设备上,有许多工具可以导致这种情况.例如.一种工具,用于显示隐藏在应用内购买中的内容或隐藏广告的工具.

这些工具通常针对应用内购买或广告的开放式库.如果您使用这样的库,该工具将仅通过自己的实现替换您的类的实现,该实现将覆盖您的功能 – 表现得像已经支付的所有内容或删除显示广告的方法(例如,请参阅http://www.tenorshare.com/guide/how-to-block-ads-on-iphone-ipad-ipod.html )

我找到了至少两个使用类AdRootViewController的开放库.这意味着这样的工具会尝试替换你的类的实现,在这个过程中也会删除showBanner方法.

您只能检查这些崩溃报告是否来自越狱设备(如果您没有使用crashlytics或类似的崩溃报告库,请使用它).

如果您知道错误仅出现在越狱设备上,请忽略它.这是由用户在尝试删除广告时造成的.

点赞