Ich habe einige Probleme mit der Implementierung von Facebook Login in meinem iOS, alles funktioniert einwandfrei, wenn der Benutzer noch nicht eingeloggt ist, die Anwendung die Daten von Facebook korrekt abruft und an die nächste Viewcontroller, statt, wenn bereits in ihm angemeldet ist, sollten auf eine Rekapitulation Seite automatisch segue, die Benutzer-Informationen zeigt, aber ich kann es nicht passieren, zur Zeit bin ich mit dieser Methode:ViewController wird geändert, wenn der Benutzer Facebook ist Angemeldet
override func viewDidLoad() {
super.viewDidLoad()
LoginButton.delegate = self
if (FBSDKAccessToken.currentAccessToken() != nil) {
self.performSegueWithIdentifier("Login", sender: self)
}
}
aber in der Konsole i erhalten:
Facebook_Login.LoginViewController: 0x7fc04a519ca0 auf Facebook_Login.ViewController: 0x7fc04a41c1e0 Wessen Ansicht ist nicht in der Fensterhierarchie!
Ich habe auch versucht, die ViewDidAppear Methode verwendet, aber es segues auf die Rekapitulation Seite ohne die Variablen zu aktualisieren, so dass ich eine leere Seite
hier‘der vollständige Code erhalten:
View Controller 1
Import UIKit Import FBSDKLoginKit
Klasse Viewcontroller: UIViewController, FBSDKLoginButtonDelegate {
var nome1:String = ""
var cognome1:String = ""
var email1:String = ""
var compleanno:String = ""
var città:String = ""
var genere:String = ""
var immagine_url:String = ""
@IBOutlet weak var LoginButton: FBSDKLoginButton!
@IBAction func LoginAction(sender: AnyObject) {
LoginButton.delegate = self
LoginButton.readPermissions = ["email"]
}
func FetchInfo(){
print("scarico le informazioni...")
let parametri = ["fields":"email, first_name, last_name, birthday, hometown, gender, picture.type(large)"]
FBSDKGraphRequest(graphPath: "me", parameters: parametri).startWithCompletionHandler{(connection,result,error) -> Void in
if (error != nil){
print ("errore")
return
}
else {
if let email = result["email"] as? String {
print(email)
self.email1 = email
}
if let nome = result["first_name"] as? String {
print(nome)
self.nome1 = nome
}
if let cognome = result["last_name"] as? String {
print(cognome)
self.cognome1 = cognome
}
if let compleanno = result["birthday"] as? String{
print(compleanno)
}
if let città = result["hometown"] as? String{
print(città)
}
if var genere = result["gender"] as? String{
if (genere == "male"){
genere = "maschio"
}
else {
genere = "femmina"
}
print(genere)
}
}
if let picture = result["picture"] as? NSDictionary, data = picture["data"] as? NSDictionary, url = data["url"] as? String{
self.immagine_url = url
print(self.immagine_url)
}
}
return
}
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!){
if (result.isCancelled == true){
print("cancellato")
}
else {
print("login effettuato")
FetchInfo()
self.performSegueWithIdentifier("Login", sender: self)
}
}
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!){
}
func loginButtonWillLogin(loginButton: FBSDKLoginButton!) -> Bool{
return true
}
@IBAction func returned(segue:UIStoryboardSegue){
}
override func viewDidLoad() {
super.viewDidLoad()
LoginButton.delegate = self
}
override func viewDidAppear(animated: Bool) {
if (FBSDKAccessToken.currentAccessToken() != nil) {
FetchInfo()
if(nome1 == ""){
}
else {
self.performSegueWithIdentifier("Login", sender: self)
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destinazione:LoginViewController = segue.destinationViewController
as! LoginViewController
destinazione.temp_nome = nome1
destinazione.temp_cognome = cognome1
destinazione.temp_email = email1
destinazione.img_profile_url = immagine_url
}
}
Viewcontroller 2:
Import UIKit Import FBSDKLoginKit
Klasse LoginViewController: UIViewController, FBSDKLoginButtonDelegate {
var temp_nome = ""
var temp_cognome = ""
var temp_email = ""
var img_profile_url:String = ""
@IBOutlet weak var Nome_Utente: UILabel!
@IBOutlet weak var email: UILabel!
@IBOutlet weak var Immagine_Utente: UIImageView!
@IBOutlet weak var Login_button: FBSDKLoginButton!
@IBAction func Login_button_Action(sender: AnyObject) {
Login_button.delegate = self
}
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!){
}
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!){
self.performSegueWithIdentifier("Back", sender: self)
}
override func viewDidLoad() {
super.viewDidLoad()
Nome_Utente.text = "\(temp_nome)" + " " + "\(temp_cognome)"
email.text = "\(temp_email)"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
Sind Sie sicher, Informationen korrekt zu aktualisieren? Wo aktualisieren Sie in Ihrer Zusammenfassung die UI-Elemente mit den Benutzerinformationen? –
Ja absolut, wenn ich auf den Login Button klicke funktioniert alles gut ... wenn es hilfreich ist kann ich den kompletten Code hochladen –
Du kannst, es ist immer einfacher herauszufinden, was los ist;) –