Ich baue eine App mit Swift, die Ihre E-Mail-Adresse, Ihren Vornamen und Ihren Nachnamen von Ihrem Facebook-Profil abruft und zeigt es auf dem Bildschirm an.Wenn ich versuche, den Text eines UIlabels zu ändern, erhalte ich in Swift eine unerwartete Nil-Entpackung. Swift
Um es einfacher zu machen, konzentriere ich mich darauf, die E-Mail zu arbeiten, und dann werde ich am Vor- und Nachnamen arbeiten.
Ich habe ein Label mit dem Namen EmailLabel erstellt, das die E-Mail-Adresse auf dem Bildschirm anzeigen soll. Allerdings, wenn ich versuche EmailLabel Text auf die tatsächliche E-Mail-Adresse zu ändern, erhalte ich die
Thread1: EXC_BAD_INSTRUCTION ERROR (code=EXC_1386_INVOP, subcode=0x0)
und die
fatal error:unexpectedly found nil while unwrapping an Optional value
Nachricht.
Ich weiß, dass das EmailLabel immer als Null auspacken. Um dies zu beheben, schrieb ich:
self.EmailLabel = UILabel()
Es hielt mich den Fehler geben, aber die EmailLabel würde nicht den Text der eigentlichen E-Mail-Adresse aktualisieren.
Ich würde wirklich jede Hilfe schätzen! By the way, ich bin ganz neu in die Programmierung so versuchen Sie es eine einfache Antwort :)
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
}
}
Ich habe versucht, suchen Sie in anderen Fragen zu geben, aber es funktioniert nicht
Gibt es einen Grund für das Label eine Null sein abgesehen von dem IB Outlet nicht verbunden sein?
Wahrscheinlich dies: http://stackoverflow.com/a/33129428/2227743 – Moritz
Prüfen Sie die IB Ausgang für 'EmailLabel' verbunden ist, dass Konvention besagt, auch sollte die Eigenschaften beginnen mit einem Kleinbuchstaben (dh 'emailLabel') – Hamish
Versuchen Sie, die Bezeichnung in der Hauptwarteschlange thread – iYoung