无法识别的选择器发送到来自 Facebook SDK 的类
Posted
技术标签:
【中文标题】无法识别的选择器发送到来自 Facebook SDK 的类【英文标题】:unrecognized selector sent to class coming from Facebook SDK 【发布时间】:2018-11-02 03:20:55 【问题描述】:大约一年前,我将 Facebook SDK 安装到我的 ios 应用中,仅用于广告跟踪。我在我的应用程序中调用的唯一 SDK 调用是它们告诉您放入应用程序委托的三个。没有任何问题,我的应用运行良好(广告跟踪工作正常)。
最近 Facebook 发送了一封电子邮件,要求我更新 SDK,所以我做到了。现在我的应用程序在启动后几秒钟内崩溃,并出现一串“无法识别的选择器发送到类”错误。
由于我没有 Facebook 的源代码,我无法调试它,不知道它来自哪里,除了从我的应用程序中完全删除 SDK 之外别无选择,这将使我的营销人员非常心烦意乱。
这是什么问题?有人找到解决办法了吗?
【问题讨论】:
仅供参考,我确定问题来自 Facebook,因为 (a) 错误消息包含文本 "+[NSError fbErrorWithCode:userInfo:message:underlyingError:]" 和 (b) 问题如果我注释掉三个 Facebook SDK 调用,它就会消失。 【参考方案1】:在构建设置中,您是否为“其他链接器标志”设置了-ObjC
?
这为我解决了问题。
此外,如果您不使用 CocoaPods,您可以look at the podspec 并尝试确保您已链接所需的依赖项。
具体来说:
"ios":
"weak_frameworks": [
"Accounts",
"CoreLocation",
"Social",
"Security",
"QuartzCore",
"CoreGraphics",
"UIKit",
"Foundation",
"AudioToolbox",
"WebKit"
]
,
【讨论】:
谢谢,-ObjC 标志为我解决了这个问题。显然,在上一个版本中不需要。【参考方案2】:参见RN FBK SDK iOS issue 472 和RN Unity SDK issue 208 也报告了类似的崩溃。
对我来说,添加 -ObjC 链接器标志不足以防止崩溃。
我还必须包含 force_load 标志和 FBSDKLoginKit 框架的正确路径。
所以在 Other Link Flags 项目中的 Build Settings 在 XCode 中我添加了:
-ObjC
-force_load
-$PROJECT_DIR/FacebookSDK/FBSDKCoreKit.framework/FBSDKCoreKit
请注意,您到 FBSDKCoreKit 框架的路径可能不同。
在上面链接的 Github 问题中有更多关于此崩溃原因的详细信息。
【讨论】:
以上是关于无法识别的选择器发送到来自 Facebook SDK 的类的主要内容,如果未能解决你的问题,请参考以下文章
尝试获取 AppDelegate 时出现“无法识别的选择器发送到实例”错误
Facebook iOS SDK 3.2.1 - [NSError fberrorShouldNotifyUser]:无法识别的选择器发送到实例
无法识别的选择器发送到 UINavigationController 的实例
无法识别的选择器发送到实例 resignFirstResponder