尝试获取 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 链接器错误