【问题标题】:iOS app crashing when trying to log out of Facebook using FBSDK for swiftiOS 应用程序在尝试使用 FBSDK 快速注销 Facebook 时崩溃
【发布时间】:2019-07-05 03:47:56
【问题描述】:

我在为我的 iOS 应用程序使用 FBSDK 时遇到问题。登录似乎可以正常工作,但注销会立即使应用程序崩溃。

我正在使用 Swift 4 和 FBSDK 4.4 版。我怀疑我在网上找到的文档和我在谷歌上搜索的其他解决方案没有使用完全相同的版本,因为我发现没有任何东西对我有用。这是我的应用委托代码:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]?) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    }

func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        let handled: Bool = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: options[.sourceApplication] as? String, annotation: options[.annotation])
        return handled
    }

这是我的注销代码:

@IBAction func btnFbLogoutClicked(_ sender: UIButton) {
        let loginManager : FBSDKLoginManager = FBSDKLoginManager()
        loginManager.logOut()
        self.performSegue(withIdentifier: "UnwindToLogin", sender: self)
    }

它在 logOut() 上崩溃并关闭应用程序,并且不执行 segue。如果有人使用相同版本的 FBSDK 和 Swift,我将不胜感激。

【问题讨论】:

  • 控制台有错误崩溃日志吗?
  • @Larme 它只是这样说:libc++abi.dylib: 以 NSException 类型的未捕获异常终止
  • 完整的错误信息?上面什么都没有?
  • @Larme 不,它只是在 App Delegate 文件中停止并显示该错误或使应用程序崩溃而没有错误消息

标签: ios swift facebook swift4 fbsdk


【解决方案1】:

您应该在 Appdelegate 中添加缺少的方法并按照我的按钮操作代码。它对我有用。希望它会为你工作。

  import UIKit
  import FBSDKCoreKit

  @UIApplicationMain
  class AppDelegate: UIResponder, UIApplicationDelegate {
     var window: UIWindow?
     func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    }
    func applicationWillResignActive(application: UIApplication) {    
        FBSDKAppEvents.activateApp()
    }
    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
     }
  }

 //MARK: FacebookLogin Button
 @IBAction func btnFacebookLoginClicked(sender: AnyObject) {
    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
    fbLoginManager.logOut()
    fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web //Without safari Browser
    fbLoginManager.logInWithReadPermissions(["email"], fromViewController: self, handler: { (result, error) -> Void in
        if (error != nil){
            let fbloginresult : FBSDKLoginManagerLoginResult = result
            if(fbloginresult.grantedPermissions.contains("email")){
                self.getFBUserData()
                fbLoginManager.logOut()
            }
        }else if result.isCancelled {
        print("Cancelled")
    }
    })
}

【讨论】:

  • 这个答案没有解释任何东西。您应该添加 cmets 以显示您在做什么以及为什么。仅代码答案没有帮助。
  • @Jamil 这对我不起作用,但我的登录按钮也在与我的注销按钮不同的页面上。这有什么区别吗?我也想知道这些函数应该做什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 2022-12-19
相关资源
最近更新 更多