This question already has answers here:
What does “fatal error: unexpectedly found nil while unwrapping an Optional value” mean?
(11个答案)
三年前关闭。
我正在用Swift构建一个应用程序,它可以在登录后从你的Facebook个人资料中提取你的电子邮件地址、名字和姓氏并显示在屏幕上。
为了使它更简单,我把重点放在让电子邮件工作,然后我将工作的名字和姓氏。
我创建了一个名为email label的标签,它应该在屏幕上显示电子邮件地址。但是,当我尝试将EmailLabel的文本更改为实际的电子邮件地址时,我会得到
Thread1: EXC_BAD_INSTRUCTION ERROR (code=EXC_1386_INVOP, subcode=0x0)

以及
fatal error:unexpectedly found nil while unwrapping an Optional value

信息。
我知道电子邮件标签总是以零的形式展开。
为了解决这个问题我写了:
self.EmailLabel = UILabel()

它不再告诉我错误,但EmailLabel不会将其文本更新为实际的电子邮件地址。
我非常感谢你的帮助!顺便说一下,我对编程还很陌生,所以请试着给出一个简单的答案:)
import UIKit
import FBSDKCoreKit
import FBSDKLoginKit

class ViewController: UIViewController, FBSDKLoginButtonDelegate {

@IBOutlet var EmailLabel: UILabel!
@IBOutlet var SomeLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    var loginButton = FBSDKLoginButton()
    loginButton.readPermissions = ["public_profile", "email", "user_friends"]
    loginButton.center = self.view.center
    loginButton.delegate = self
    self.view.addSubview(loginButton)

}


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

    fetchProfile()
    if error == nil
    {
        print("Login complete")
        self.performSegueWithIdentifier("showInfo", sender: nil)
    }
    else
    {
        print(error.localizedDescription)
    }
}

func fetchProfile(){
    print("fetchProfile")

    let parameters = ["fields": "email, first_name, last_name"]
    FBSDKGraphRequest(graphPath: "me", parameters: parameters).startWithCompletionHandler { (connection, result, error) -> Void in

        if error != nil{
            print(error)
            return
        }

        if var email = result["email"] as? String {
            print(email)
            self.EmailLabel.text = "\(email)"
        }

        if let first_name = result["first_name"] as? String {
            print(first_name)
        }

        if let last_name = result["last_name"] as? String {
            print(last_name)
        }
    }
}

func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {

}

func loginButtonWillLogin(loginButton: FBSDKLoginButton!) -> Bool {
    return true
}


}

我试过看其他的问题,但没用
除了IB插座未连接外,标签是否为零?

最佳答案

我在ViewDidLoad函数中添加了一个if语句:
如果电子邮件标签!=无{
获取配置文件()
}
而且成功了!
非常感谢你的帮助

10-08 13:41