ios – 在respondsToSelector检查后,doNotRecognizeSelector错误

ios – 在respondsToSelector检查后,doNotRecognizeSelector错误,第1张

概述简短说明:当对象的调用方法肯定有这个方法并且在调用respondsToSelector之后发生时,我得到了doesNotRecognizeSelector错误. 这是一个非常奇怪的情况,我不明白它是如何:).我在一些用户设备的日志中看到了这个错误,但在所有用户设备上都看不到.我不能在我自己的设备上重复这个. 我试图找出它是如何发生的,并使用respondsToSelector添加条件,但问题再次发 简短说明:当对象的调用方法肯定有这个方法并且在调用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 + 12456242 libobjc.A.dylib objc_exception_throw + 341363 CoreFoundation -[NSObject(NSObject) doesNotRecognizeSelector:] + 12744684 CoreFoundation ___forwarding___ + 12621885 CoreFoundation _CF_forwarding_prep_0 + 1863766 <project_ID> 4296487336 + 487848...

附:可能是堆栈跟踪会更好地显示它:

解决方法 我意识到有一种非常罕见的情况会发生这种情况.

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

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

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

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

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

总结

以上是内存溢出为你收集整理的ios – 在respondsToSelector检查后,doNotRecognizeSelector错误全部内容,希望文章能够帮你解决ios – 在respondsToSelector检查后,doNotRecognizeSelector错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1031955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存