使用 Swift 和 Parse 获取 Facebook UserData 时出现致命错误

Posted

技术标签:

【中文标题】使用 Swift 和 Parse 获取 Facebook UserData 时出现致命错误【英文标题】:Fatal error while getting Facebook UserData with Swift and Parse 【发布时间】:2015-07-18 01:07:42 【问题描述】:

我正在尝试从 Facebook 登录添加到 Parse 用户。

登录有效,但是当我想从 Facebook 用户获取数据时,我的应用程序崩溃说:“致命错误:在展开可选值 (lldb) 时意外发现 nil” 它来自 nil 的“firstName”值(参见下面的代码) 知道为什么吗?会很棒:)

 var fbRequest = FBSDKGraphRequest(graphpath: "me", parameters: nil)
            fbRequest.startWithCompletionHandler( (FBSDKGraphRequestConnection, result, error) -> Void in

                if (error == nil && result != nil) 
                    let facebookData = result as! NSDictionary //FACEBOOK DATA IN DICTIONARY
                    let facebookID = (facebookData.objectForKey("id") as? String)
                    let userEmail = (facebookData.objectForKey("email") as? String)
                    let firstName = (facebookData.objectForKey("first_name") as? String)
                    let lastName = (facebookData.objectForKey("last_name") as? String)

                     var user = PFUser()

                     // println(firstName!) -> says that firstName is nil: " fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)"


                    user.setValue(firstName, forKey: "firstName")
                    user.setValue(lastName, forKey: "username")
                    user.setValue(facebookID, forKey: "objectID")
                    user.setValue(userEmail, forKey: "email")




                    user.signUpInBackgroundWithBlock   .... 

我完全不知道如何解决这个问题,所以任何帮助都会很棒! :)

PS:这段代码在

    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!)  ... 

【问题讨论】:

【参考方案1】:

尝试用关键的字段

给出参数
 if((FBSDKAccessToken.currentAccessToken()) != nil)
        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, email, first_name, last_name"]).startWithCompletionHandler( (connection, result, error) -> Void in
            if (error == nil)


                let email = result.valueForKey("email") as? String       
                let fbid = result.valueForKey("id") as! String
                let fname = result.valueForKey("first_name") as! String
                let lname = result.valueForKey("last_name") as! String

            
        )
    

【讨论】:

以上是关于使用 Swift 和 Parse 获取 Facebook UserData 时出现致命错误的主要内容,如果未能解决你的问题,请参考以下文章

Swift:如何获取 Parse 的多个用户名和照片

使用 Parse 和 Swift 的一个键上的两个查询约束

在 Sign-up for Parse 后端获取 Facebook 个人资料图片 (Swift)

IOS 如何使用 Parse Swift 获取每个用户的个人资料图片

从最新到最旧对我的提要中的帖子进行排序(使用 Swift 和 Parse)

在 Swift (iOS) 中使用水平滑动浏览 Parse.com 中的数据