适用于 iOS 的 FBSDK:“发送到实例的无法识别的选择器”

Posted

技术标签:

【中文标题】适用于 iOS 的 FBSDK:“发送到实例的无法识别的选择器”【英文标题】:FBSDK for iOS: "unrecognized selector sent to instance" 【发布时间】:2015-04-09 14:17:39 【问题描述】:

集成 Facebook SDK 后,我在启动应用程序后立即收到以下错误: “无法识别的选择器发送到实例”

我做了什么:

我使用 XCode 6 for ios 8.2 设置了一个简单的视图控制器应用程序,并将 Facebook iOS SDK 与 Cocoapods 集成。

我通过“入门”部分工作并将必要的代码放入 AppDelegate 并更改了 .plist 文件。 运行应用程序时,它会立即停止并出现“无法识别的选择器”-错误。

我还试用了 Facebook-SDK 中的 Example-App “Scrumptious”,它运行良好。我将 Scrumptions 中的代码构建到我的应用程序中,并遇到与以前相同的错误。下面我将发布调用堆栈。

Facebook 建议将 -ObjC 切换到链接器标志以解决这些错误。但是这个标志已经设置好了(我认为 cocoapods 已经这样做了)。

我能做什么?什么不见​​了?

这是调用栈:

2015-04-09 15:58:40.949 myapp[65629:2910713] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x7fbd6b741140'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000103205a75 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000102e9ebb7 objc_exception_throw + 45
    2   CoreFoundation                      0x000000010320cd1d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x00000001031649dc ___forwarding___ + 988
    4   CoreFoundation                      0x0000000103164578 _CF_forwarding_prep_0 + 120
    5   myapp                             0x0000000100993c66 __107+[FBSDKAppEventsUtility activityParametersDictionaryForEvent:implicitEventsOnly:shouldAccessAdvertisingID:]_block_invoke + 470
    6   libdispatch.dylib                   0x0000000104257614 _dispatch_client_callout + 8
    7   libdispatch.dylib                   0x0000000104243881 dispatch_once_f + 565
    8   myapp                             0x000000010099388a +[FBSDKAppEventsUtility activityParametersDictionaryForEvent:implicitEventsOnly:shouldAccessAdvertisingID:] + 1114
    9   myapp                             0x000000010099be4c +[FBSDKAppLinkUtility fetchDeferredAppLink:] + 780
    10  myapp                             0x0000000100974e6e -[AppDelegate applicationDidBecomeActive:] + 142
    11  UIKit                               0x0000000101bd3f96 -[UIApplication _stopDeactivatingForReason:] + 313
    12  UIKit                               0x0000000101be8ea2 -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:] + 2648
    13  FrontBoardServices                  0x0000000105b33243 __31-[FBSSerialQueue performAsync:]_block_invoke + 16
    14  CoreFoundation                      0x000000010313ac7c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    15  CoreFoundation                      0x00000001031309c5 __CFRunLoopDoBlocks + 341
    16  CoreFoundation                      0x0000000103130785 __CFRunLoopRun + 2389
    17  CoreFoundation                      0x000000010312fbc6 CFRunLoopRunSpecific + 470
    18  GraphicsServices                    0x0000000103b72a58 GSEventRunModal + 161
    19  UIKit                               0x0000000101bd9580 UIApplicationMain + 1282
    20  myapp                             0x00000001009753b3 main + 115
    21  libdyld.dylib                       0x000000010428c145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

【问题讨论】:

【参考方案1】:

查看您的 plist 文件。它必须包含 FacebookAppId、DisplayName 和 URL 方案。如果只缺少一个,就会出现这样的错误。

这是我的一个应用程序,它与 Facebook-API 一起正常工作:

【讨论】:

非常感谢!我将 AppID 传递到 URL 类型下的第一项中,而没有第二个节点“URL 方案”。这导致了这个错误。

以上是关于适用于 iOS 的 FBSDK:“发送到实例的无法识别的选择器”的主要内容,如果未能解决你的问题,请参考以下文章

Google Play 游戏服务 iOS:[UITableViewWrapperView 样式]:发送到实例的无法识别的选择器

iOS Cocoa NSArrayI 长度]:发送到实例的无法识别的选择器

ios [__NSCFNumber 长度]:发送到实例的无法识别的选择器

AppDelegate - 发送到实例的无法识别的选择器[关闭]

XCode6/Swift:发送到实例的无法识别的选择器

Xamarin Forms:发送到实例的无法识别的选择器