ios - Swift Facebook 登录崩溃

标签 ios swift fbsdk

我正在使用下面的代码登录 Facebook。它对绝大多数用户来说工作得很好,但由于某种原因,它对少数用户来说会崩溃。

因为没有人提交过任何崩溃报告,而且我自己似乎无法重现该问题,这意味着我正在绞尽脑汁想找出原因。

非常感谢任何帮助!

@IBAction func btnFBLoginPressed(sender: AnyObject) {

    let fbLoginManager: FBSDKLoginManager = FBSDKLoginManager()

    fbLoginManager.logInWithReadPermissions(["public_profile","email", "user_friends"], fromViewController: self, handler: { (result, error) -> Void in

        if error == nil {

            let fbloginresult: FBSDKLoginManagerLoginResult = result

            if result.isCancelled {
                print("cancelled")
                return
            }

            if fbloginresult.grantedPermissions.contains("email") {
                self.getFBUserData()
                //fbLoginManager.logOut()
            }
        }
    })
}

func getFBUserData() {

    if FBSDKAccessToken.currentAccessToken() != nil {

        let params: [String: String] = ["fields": "id, name, first_name, last_name, picture.type(large), email, gender, age_range, locale"]

        FBSDKGraphRequest(graphPath: "me", parameters: params).startWithCompletionHandler({ (connection, result, error) -> Void in
            if error == nil {

                let userName: NSString = result.valueForKey("name") as! NSString
                let facebookID: NSString = result.valueForKey("id") as! NSString
                let firstName: NSString = result.valueForKey("first_name") as! NSString
                let lastName: NSString = result.valueForKey("last_name") as! NSString
                let email: NSString = result.valueForKey("email") as! NSString
                let gender: NSString = result.valueForKey("gender") as! NSString
                let locale: NSString = result.valueForKey("locale") as! NSString

                let defaults = NSUserDefaults.standardUserDefaults()

                defaults.setObject("\(userName)", forKey: "userName")
                defaults.setObject("\(facebookID)", forKey: "facebookID")
                defaults.setObject("\(firstName)", forKey: "firstName")
                defaults.setObject("\(lastName)", forKey: "lastName")
                defaults.setObject("\(email)", forKey: "email")
                defaults.setObject("\(gender)", forKey: "gender")
                defaults.setObject("\(locale)", forKey: "locale")
            }
        })

    }
}

最佳答案

您不应该假设 result 字典包含您正在访问的所有键。例如,如果 result 字典不包含用户的电子邮件,这行代码将失败:

let email : NSString = result.valueForKey("email") as! NSString

因此,尝试使用 as? 而不是使用 as! 运算符:

if let email = result.valueForKey("email") as? NSString {
    // do something
}

关于ios - Swift Facebook 登录崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38537078/

相关文章:

ios - 如何刷新 UITableViewCell 中的数据?

objective-c - 将 Objective-C 对象向下转换为 Swift 类型失败(静默)

iOS : Not receiving facebook App invites

ios - FBSDKGraphRequest 实例方法 '-startWithCompletionHandler:' 未找到(返回类型默认为 'id' )

ios - 将缩小 View 的图像与 subview 中保持原始大小的图像合并

ios - UITableVIew 无法正确渲染 UITableViewCell

objective-c - 即使在 macOS 应用程序的窗口之外也能永久检测 3 指平移手势

ios - FFmpeg + iOS + 有损蜂窝连接

ios - 货币数字格式化程序 - 当数字为整数时省略小数部分

react-native - 错误: use of undeclared identifier 'FBSDKApplicationDelegate'