这是一个非常奇怪的情况,我不明白它是如何:).我在一些用户设备的日志中看到了这个错误,但在所有用户设备上都看不到.我不能在我自己的设备上重复这个.
我试图找出它是如何发生的,并使用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错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)