Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用FBSDK实现GraphRequest中的数据持久化_Ios_Swift_Facebook Sdk 4.0 - Fatal编程技术网

Ios 使用FBSDK实现GraphRequest中的数据持久化

Ios 使用FBSDK实现GraphRequest中的数据持久化,ios,swift,facebook-sdk-4.0,Ios,Swift,Facebook Sdk 4.0,大家下午好 我试图从graphrequest中获取数据,并能够将数据传递给另一个viewController,但显然它不会保存在变量中,除了进行查询外,数据会被删除,不会保存在变量中 你们有没有遇到过这样或那样的问题 我在下面留下了我的第一个viewController代码 import UIKit import FBSDKLoginKit class ViewController: UIViewController,FBSDKLoginButtonDelegate { @IBOutlet

大家下午好

我试图从graphrequest中获取数据,并能够将数据传递给另一个viewController,但显然它不会保存在变量中,除了进行查询外,数据会被删除,不会保存在变量中

你们有没有遇到过这样或那样的问题

我在下面留下了我的第一个viewController代码

import UIKit
import FBSDKLoginKit

class ViewController: UIViewController,FBSDKLoginButtonDelegate {

@IBOutlet var test: UILabel!


var comprobacion = "";

override func viewDidLoad() {
    super.viewDidLoad()
    if let token = FBSDKAccessToken.current(), !token.isExpired {

        let loginButton = FBSDKLoginButton()
        loginButton.center = view.center
        loginButton.layoutIfNeeded()
        loginButton.delegate = self
        view.addSubview(loginButton)
        loginButton.awakeFromNib()
        loginButton.readPermissions = ["public_profile", "email"]
        
    }else{
        
    let loginButton = FBSDKLoginButton()
    loginButton.center = view.center
    loginButton.delegate = self
    view.addSubview(loginButton)
    loginButton.layoutIfNeeded()
    loginButton.awakeFromNib()
    loginButton.readPermissions = ["public_profile", "email"]
    
    }
    
}

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
    
    let resultado = result?.token?.tokenString
    
    let request = FBSDKLoginKit.FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name"], tokenString: resultado, version: nil, httpMethod: "get")
    
    request?.start(completionHandler: { connection , result, error in
        
        let datos: [String:AnyObject] = result as! [String:AnyObject];
        
        self.comprobacion =  (datos["email"] as! NSString) as String;
        
        print("campos \(String(describing: result) )")
        
        self.test.text = self.comprobacion
        
    })
    
    performSegue(withIdentifier: "second", sender: self)
    let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let newViewController = storyBoard.instantiateViewController(withIdentifier: "SecondController") as! SecondController
    self.present(newViewController, animated: true, completion: nil)
    
    
     
    
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let destino = segue.destination as! SecondController
    destino.recibir = comprobacion;
    
}


func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
    
    print("GoodBye...   Hommi")
}
}
 import UIKit

class SecondController: UIViewController {

@IBOutlet var Email: UILabel!
var recibir: String!



override func viewDidLoad() {
    super.viewDidLoad()
    print("recibir \(String(describing: recibir))")
  
    Email.text = String(recibir)
}

 }
我将代码留在第二个viewController的下面

import UIKit
import FBSDKLoginKit

class ViewController: UIViewController,FBSDKLoginButtonDelegate {

@IBOutlet var test: UILabel!


var comprobacion = "";

override func viewDidLoad() {
    super.viewDidLoad()
    if let token = FBSDKAccessToken.current(), !token.isExpired {

        let loginButton = FBSDKLoginButton()
        loginButton.center = view.center
        loginButton.layoutIfNeeded()
        loginButton.delegate = self
        view.addSubview(loginButton)
        loginButton.awakeFromNib()
        loginButton.readPermissions = ["public_profile", "email"]
        
    }else{
        
    let loginButton = FBSDKLoginButton()
    loginButton.center = view.center
    loginButton.delegate = self
    view.addSubview(loginButton)
    loginButton.layoutIfNeeded()
    loginButton.awakeFromNib()
    loginButton.readPermissions = ["public_profile", "email"]
    
    }
    
}

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
    
    let resultado = result?.token?.tokenString
    
    let request = FBSDKLoginKit.FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name"], tokenString: resultado, version: nil, httpMethod: "get")
    
    request?.start(completionHandler: { connection , result, error in
        
        let datos: [String:AnyObject] = result as! [String:AnyObject];
        
        self.comprobacion =  (datos["email"] as! NSString) as String;
        
        print("campos \(String(describing: result) )")
        
        self.test.text = self.comprobacion
        
    })
    
    performSegue(withIdentifier: "second", sender: self)
    let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let newViewController = storyBoard.instantiateViewController(withIdentifier: "SecondController") as! SecondController
    self.present(newViewController, animated: true, completion: nil)
    
    
     
    
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let destino = segue.destination as! SecondController
    destino.recibir = comprobacion;
    
}


func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
    
    print("GoodBye...   Hommi")
}
}
 import UIKit

class SecondController: UIViewController {

@IBOutlet var Email: UILabel!
var recibir: String!



override func viewDidLoad() {
    super.viewDidLoad()
    print("recibir \(String(describing: recibir))")
  
    Email.text = String(recibir)
}

 }
我意识到电子邮件没有保存在我的变量中,因为它在clousure请求之外。开始如果我打印变量,它是空的

有什么帮助吗?

将代码重新排列到

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
    
    let resultado = result?.token?.tokenString
    
    let request = FBSDKLoginKit.FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name"], tokenString: resultado, version: nil, httpMethod: "get")
    
    request?.start(completionHandler: { connection , result, error in
        
        let datos: [String:AnyObject] = result as! [String:AnyObject];
        
        self.comprobacion =  (datos["email"] as! NSString) as String;
        
        print("campos \(String(describing: result) )")
        
        self.test.text = self.comprobacion 

        DispatchQueue.main.async {
           self.performSegue(withIdentifier: "second", sender: self) 
        }
        
    })
    
    
}
提示

1-内部代码request?.start(completionHandler在segue之后运行asynchnoulsy,因此segue在var仍然为nil时发生


2-不要在已经使用segue时实例化vc并将其显示出来

非常感谢!。是否有办法使其显示在另一个viewController的标签中?尽管有segue和异步任务,但它不会反映在我的标签上。