我即将快速地教自己,而且进展顺利。 但!总是一个但是......
我在开始页面的应用程序上实现了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)")
}
})
}
我的功能看起来像
答案 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)")
}
})
}