ios - 当我尝试更改 UIlabel 的文本时,我在 Swift 中得到 "unexpectedly found nil while unwrapping value"

标签 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 总是解包为 nil。 为了解决这个问题,我写道:

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 未连接之外,标签为零是否有其他原因?

最佳答案

我在 ViewDidLoad 函数中添加了一个 if 语句: 如果 emailLabel != nil{ 获取配置文件() } 它奏效了!

非常感谢您的帮助

关于ios - 当我尝试更改 UIlabel 的文本时,我在 Swift 中得到 "unexpectedly found nil while unwrapping value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37510849/

相关文章:

ios - 将模块导入 Cocoa Touch Framework 并将框架嵌入到 App Project 时,没有此类模块 'Alamofire'

ios - 无法为 IOS 编译 Crypto++ 库

ios - Storyboard通过全局值访问 UIControl 属性

ios - 显示从 url 到 Collection View Swift 单元格的 3 张图像

ios - 如何在 "dd/MM/yyyy"格式 ios 中获取 NSDate?

ios - AVPlayer 不立即在 iOS 10 上播放视频,而只播放音频

ios - 检查 Key 是否存在于 Firebase 中

swift - Swift中如何获取枚举值的名称?

ios - 使用 MapKit - Swift 获取道路距离

iphone - 更改产品名称会导致问题吗?