当我尝试更改UIlabel的文本时,我得到一个"意外发现的nil,同时展开值"在斯威夫特

时间:2016-05-29 14:06:58

标签: ios xcode swift facebook uilabel

我正在使用Swift构建一个应用程序,该应用程序在登录后从您的Facebook个人资料中提取您的电子邮件地址,名字和姓氏,并在屏幕上显示。

为了简单起见,我专注于让电子邮件发挥作用,然后我会处理名字和姓氏。

我创建了一个名为EmailLabel的标签,该标签应该在屏幕上显示电子邮件地址。但是,当我尝试将EmailLabel的文本更改为实际的电子邮件地址时,我得到了

Thread1: EXC_BAD_INSTRUCTION ERROR (code=EXC_1386_INVOP, subcode=0x0)

fatal error:unexpectedly found nil while unwrapping an Optional value

消息。

我知道EmailLabel始终是unwrapping unwrapping。 为了解决这个问题,我写道:

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 Outlet没有连接标签之外,有没有理由没有连接?

2 个答案:

答案 0 :(得分:2)

我在ViewDidLoad函数中添加了一个if语句:     if emailLabel!= nil {         fetchProfile()     } 它有效!

非常感谢你的帮助

答案 1 :(得分:0)

您的插座可能已断开连接。 1 1 1 2 1 3 2 1 2 4 3 2 3 3 从您的代码中的标签到您的插座,您的标签将不再为零。