适用于 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 长度]:发送到实例的无法识别的选择器