【发布时间】:2016-09-27 09:48:58
【问题描述】:
我正在使用 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 之外,标签为 nil 是否有其他原因?
【问题讨论】:
-
检查您的 IB 插座是否已连接
EmailLabel,此外约定规定属性应以小写字母开头(即emailLabel) -
尝试更新主队列线程中的标签
-
谢谢,我将 EmailLabel 更改为 emailLabel 并尝试了 Eric D 所说的内容并阅读了 originaluser2 链接的内容,但它仍然无法正常工作。
-
iYoung,如何更新主队列线程中的标签?
标签: ios xcode swift facebook uilabel