尝试获取 AppDelegate 时出现“无法识别的选择器发送到实例”错误

Posted

技术标签:

【中文标题】尝试获取 AppDelegate 时出现“无法识别的选择器发送到实例”错误【英文标题】:"Unrecognized selector sent to instance" error while trying to get AppDelegate 【发布时间】:2012-10-03 08:34:30 【问题描述】:

我按照 Facebook 的说明 (http://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/) 并尝试实现一个 facebook 登录按钮。但是,我在尝试调用应用程序委托方法时收到“无法识别的选择器发送到实例”错误。

方法:

- (IBAction)pressFBLogin:(id)sender 
    MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDelegate openSessionWithAllowLoginUI:YES];

从错误来看,我认为是内存指针错误指向了错误的实例。我将断点设置在:

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];

它确实达到了这个声明,所以动作绑定没有错。当它尝试运行下一条语句时出现错误:

[appDelegate openSessionWithAllowLoginUI:YES];

当我进行调试时,我从监视窗口中发现一件看起来很奇怪的东西是 appDelegate 变量。当断点在

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];

变量显示为:

appDelegate = (MyViewController *)0x003b9a10
> UIViewController(UIViewController)
> delegate = (objc_object *) 0x0033edb0

变量赋值后,断点在

[appDelegate openSessionWithAllowLoginUI:YES];

变量显示为:

appDelegate = (MyViewController *)0x00316480
> UIViewController(UIViewController)
> delegate = (objc_object *) 0x00000000

在这两个阶段,appDelegate 似乎都是 MyAppDelegate 的对象。

【问题讨论】:

听起来好像您错误地将某些 viewController 的委托分配给了您的应用委托。 是的,看起来是这样,但我找不到导致这种情况的来源。我在 MyViewController 中有一个“delegate”属性,我尝试将该属性重命名为“mydelegate”,但仍然出现相同的错误。 【参考方案1】:

我解决了我的问题。 appDelegate 变量最终没有问题。问题很简单:我的头文件和 openSessionWithAllowLoginUI 函数的实现文件之间有一个小错字。这样的问题通常会在编译时被检测为错误,我很惊讶这样的问题没有构建错误,而只是一个不完整实现的警告......

【讨论】:

【参考方案2】:

我面临同样的崩溃,我已经通过添加解决了这个问题

类 AppDelegate: UIResponder, UIApplicationDelegate

var 窗口:UIWindow?

在我的 APP Delegate 中,这解决了我的问题。我正在使用 Xcode 12.3,当我尝试使用 firebase auth 进行注册时会发生此崩溃

【讨论】:

以上是关于尝试获取 AppDelegate 时出现“无法识别的选择器发送到实例”错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Alamofire 解析 json 时出现 AppDelegate 错误

在 PyCharm 上导入 Kivy 时出现错误“[Core] 选项 --mode 无法识别”

Xcode - 在 AppDelegate 中加载声音时出现 Apple Mach-O 链接器错误

当我关闭 Onboarding 并第二次运行应用程序时出现 AppDelegate 问题

为啥在导入 AudioSegment 时出现错误?

设置 iOS 推送通知时出现问题,因为 AppDelegate.h 未找到所需的标头