在iOS9上的facebook sdk 4.6中,在facebook登录管理器上发送无法识别的选择器

时间:2015-09-21 10:45:13

标签: ios xcode facebook swift facebook-ios-sdk

您好我刚刚将我的应用程序升级到iOS 9并使用Facebook的最新SDK(版本4.6)进行Facebook登录。

我正在使用自定义登录按钮,因此使用LoginManager类。使用之前的版本它工作正常但现在我的应用程序崩溃,每当我按下登录按钮说“无法识别的选择器发送到实例”

以下是我在GameScene课程中使用的用于登录的代码。

var fbLogin = FBSDKLoginManager()
func onClickFBLogin(){
        let vc = self.view?.window?.rootViewController
        fbLogin.logInWithReadPermissions(["public_profile"] as [AnyObject], fromViewController: vc, handler: {(result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in
            if(error != nil){
                print("Facebook login error \(error)")
            } else if(result.isCancelled){
                print("Facebook login cancelled")
            } else{
                print("facebook login successful")
                if(self.isSaveMeButtonPressed){
                    print("facebook login successful")
                }
            }
        })
}

该应用程序因以下登录Xcode而崩溃。

  

[FBSDKLoginManager logInWithReadPermissions:fromViewController:handler:]:无法识别的选择器发送到实例0x7f82e51251e0

任何人都面临同样的问题?或者有人可以帮我解决这个问题?

提前致谢。

3 个答案:

答案 0 :(得分:1)

更新Facebook SDK时出现问题。似乎Facebook通过提供包文件改变了它在Documents文件夹中安装SDK的方式,但现在它提供了一个不可安装的zip文件。因此我只更换了〜\ Documents \ FacebookSDK文件夹中的现有文件。之后,看起来Xcode占用了更新代码的一部分,有些仍然保持不变。

我从项目中删除了所有框架,并重新添加了我们在Xcode中添加框架的常用方法。现在工作正常。

Facebook应该更新有关如何更新到更新SDK的文档。

答案 1 :(得分:0)

对于iOS 9,您可以向info.plist添加更多密钥。此错误可能与此有关。

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>facebook.com</key>
    <dict>
      <key>NSIncludesSubdomains</key> <true/>        
      <key>NSExceptionRequiresForwardSecrecy</key> <false/>
    </dict>
    <key>fbcdn.net</key>
    <dict>
      <key>NSIncludesSubdomains</key> <true/>
      <key>NSExceptionRequiresForwardSecrecy</key>  <false/>
    </dict>
    <key>akamaihd.net</key>
    <dict>
      <key>NSIncludesSubdomains</key> <true/>
      <key>NSExceptionRequiresForwardSecrecy</key> <false/>
    </dict>
  </dict>
</dict>

Facebook getting started

答案 2 :(得分:0)

另一个可能的问题是CocoaPod的facebook Pod安装。 从您项目中的Podfile中删除pod,运行pod install,您将看到从项目中删除了facebook pod。 我使用了他们网站上的facebook SDK,并手动导入了框架(并使用他们的说明来完成facebook SDK集成)。 重新编译并再次运行您的应用...

这是我得到的完整错误:

Checklists[14748:612592] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FBSDKLoginManager isAuthenticationURL:]: unrecognized selector sent to instance 0x6000002887f0'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010999212b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000010a55bf41 objc_exception_throw + 48
    2   CoreFoundation                      0x0000000109a13024 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
    3   CoreFoundation                      0x0000000109914f78 ___forwarding___ + 1432
    4   CoreFoundation                      0x0000000109914958 _CF_forwarding_prep_0 + 120
    5   FBSDKCoreKit                        0x00000001096e58b3 -[FBSDKApplicationDelegate openURLWithSafariViewController:sender:fromViewController:handler:] + 355
    6   Checklists                          0x0000000108b513ed -[FBSDKLoginManager(Native) performBrowserLogInWithParameters:handler:] + 654
    7   Checklists                          0x0000000108b50450 -[FBSDKLoginManager logInWithBehavior:] + 483
    8   Checklists                          0x0000000108b50250 -[FBSDKLoginManager logInWithPermissions:handler:] + 312
    9   Checklists                          0x0000000108b4ecde -[FBSDKLoginManager logInWithReadPermissions:fromViewController:handler:] + 280
    10  Checklists                          0x0000000108b4b757 -[FBSDKLoginButton _buttonPressed:] + 1662
    11  UIKit                               0x000000010b504972 -[UIApplication sendAction:to:from:forEvent:] + 83
    12  UIKit                               0x000000010b683c3c -[UIControl sendAction:to:forEvent:] + 67
    13  UIKit                               0x000000010b683f59 -[UIControl _sendActionsForEvents:withEvent:] + 450
    14  UIKit                               0x000000010b682e86 -[UIControl touchesEnded:withEvent:] + 618
    15  UIKit                               0x000000010b57a807 -[UIWindow _sendTouchesForEvent:] + 2807
    16  UIKit                               0x000000010b57bf2a -[UIWindow sendEvent:] + 4124
    17  UIKit                               0x000000010b51f365 -[UIApplication sendEvent:] + 352
    18  UIKit                               0x000000010be6ba1d __dispatchPreprocessedEventFromEventQueue + 2809
    19  UIKit                               0x000000010be6e672 __handleEventQueueInternal + 5957
    20  CoreFoundation                      0x0000000109935101 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    21  CoreFoundation                      0x00000001099d4f71 __CFRunLoopDoSource0 + 81
    22  CoreFoundation                      0x0000000109919a19 __CFRunLoopDoSources0 + 185
    23  CoreFoundation                      0x0000000109918fff __CFRunLoopRun + 1279
    24  CoreFoundation                      0x0000000109918889 CFRunLoopRunSpecific + 409
    25  GraphicsServices                    0x0000000110ae99c6 GSEventRunModal + 62
    26  UIKit                               0x000000010b5035d6 UIApplicationMain + 159
    27  Checklists                          0x0000000108b49747 main + 55
    28  libdyld.dylib                       0x000000010e45dd81 start + 1
    29  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException