gpt4 book ai didi

ios - respondsToSelector 检查后出现 doesNotRecognizeSelector 错误

转载 作者:可可西里 更新时间:2023-11-01 06:02:17 26 4
gpt4 key购买 nike

简短描述:当调用肯定有此方法的对象上的方法时,我得到 doesNotRecognizeSelector 错误,它发生在调用 respondsToSelector 之后。

这是一个非常奇怪的情况,我不明白这是怎么回事:)。我在一些用户设备的日志中看到了这个错误,但不是在所有用户设备上。我无法在自己的设备上重复此操作。

我试图弄清楚它是如何发生的,并使用 respondsToSelector 添加了条件,但问题再次发生。

下面是一些代码。希望对你有帮助

1) 我在 AppDelegate 中有一个 viewController 对象。

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

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

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

- (void) onEnterTransitionDidFinish {
[super onEnterTransitionDidFinish];

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

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

@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
...

附言可能是堆栈跟踪会更好地显示它: enter image description here

最佳答案

我意识到只有一种非常罕见的情况会发生这种情况。

在越狱设备上,有许多工具可以导致此问题。例如。显示隐藏在应用内购买背后的内容的工具或隐藏广告的工具。

这些工具通常针对应用内购买或广告的开放库。如果你使用这样的库,该工具将只用它自己的实现替换你的类的实现,该实现覆盖你的功能 - 表现得好像一切都已经支付或删除显示广告的方法(例如,参见 http://www.tenorshare.com/guide/how-to-block-ads-on-iphone-ipad-ipod.html )

我发现至少有两个使用 AdRootViewController 类的开放库。这意味着这样的工具将尝试替换您的类的实现,在此过程中还会删除方法 showBanner

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

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

关于ios - respondsToSelector 检查后出现 doesNotRecognizeSelector 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41655151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com