Facebook登录 - userEmail发生致命错误

时间:2015-07-14 20:38:38

标签: ios swift nsstring facebook-login

我即将快速地教自己,而且进展顺利。 但!总是一个但是......

我在开始页面的应用程序上实现了Facebook登录按钮。点击登录时,它第一次正常工作。它会在登录后更改场景,所以我可以继续,但如果我退出模拟器并再次打开应用程序,它会给我这个错误:

致命错误:在解包可选值时意外发现nil

错误发现于:

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

当用户之前登录一次时,应用程序自动登录,这样他们就可以避免一直登录,但似乎它不会保存userEmail?它找到用户名,但找不到该电子邮件。我到处搜索,似乎无法得到明确答案。 我希望我已经澄清了自己,这是可以理解的!

此致 亚历山大

编辑:

func returnUserData() {
    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in                
        if ((error) != nil) {
            // Process error
            println("Error: \(error)")
        } else {
            println("fetched user: \(result)")
            let userName : NSString = result.valueForKey("name") as! NSString
            println("User Name is: \(userName)")
            let userEmail : NSString = result.valueForKey("email") as! NSString
            println("User Email is: \(userEmail)")
        }
    })
}

我的功能看起来像

1 个答案:

答案 0 :(得分:0)

如果这是异步的,请确保结果/结果的数据不为空或在调用方法之前完成请求! 非常重要:变量在启动之间被清除。使用NSUserDefaults在启动之间保存变量 如果您使用核心数据,您可能忘记这样做:

func returnUserData()
{
    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

        if ((error) != nil)
        {
            // Process error
            println("Error: \(error)")
        }
        else
        {
            println("fetched user: \(result)")
            let userName : NSString = result.valueForKey("name") as! NSString

            NSUserDefaults.standardUserDefaults().setValue(userName, forKey: "USERNAME")
            NSUserDefaults.standardUserDefaults().synchronize()
            println("User Name is: \(userName)")
            let userEmail : NSString = result.valueForKey("email") as! NSString
            NSUserDefaults.standardUserDefaults().setValue(userEmail, forKey: "EMAIL")
            NSUserDefaults.standardUserDefaults().synchronize()
            println("User Email is: \(userEmail)")
        }
    })
}