2017-06-26 4 views
2

Ich kann Daten mit Oauth in Alamofire für die Anmeldung erfolgreich abrufen, aber wie JSON-Daten in einem anderen ViewController erhalten.Wie bekomme ich JSON-Daten von der Anmeldung?

func loginAccess(){ 

     let headers = [ 
      "Content-Type": "application/x-www-form-urlencoded" 
     ] 
     let parameters = [ 

      "UserName": username_textfield.text! as String, 
      "Password": password_textfield.text! as String, 
      "grant_type": "password", 
        ] 


//  let url = NSURL(string: "http://192.168.100.5:84/Token")! 
     Alamofire.request("http://192.168.100.5:84/Token", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: headers).responseJSON { (response:DataResponse<Any>) in 

      switch(response.result) { 

      case .success(_): 
       if response.result.value != nil{ 

        let statusCode = (response.response?.statusCode)! 
        print("...HTTP code: \(statusCode)") 

        if let JSON = response.result.value { 

         print("JSON: \(JSON)") 
//      } 

        } 
        if statusCode == 200{ 
         self.view.makeToast(message: "Welcome !!") 
         self.performSegue(withIdentifier: "mainview", sender: self) 

        }else{ 
        self.view.makeToast(message: "Username or password invalid") 
        } 
       } 

       break 

      case .failure(_): 

       print(response.result.error!) 
       break 

      } 
     } 
    } 

modalen Klasse

class Login{ 

    var access_token = String() 
    var token_type = String() 
    var expire_in = String() 
    var username = String() 
    var masterid = String() 
    var name = String() 
    var access = String() 
    var issued = String() 
    var expries = String() 

    init(loginJson:JSON){ 
    self.access_token = loginJson["access_token"].stringValue 
     self.token_type = loginJson["token_type"].stringValue 
     self.expire_in = loginJson["expires_in"].stringValue 
     self.username = loginJson["userName"].stringValue 
     self.masterid = loginJson["MasterID"].stringValue 
     self.name = loginJson["Name"].stringValue 
     self.access = loginJson["Access"].stringValue 
     self.issued = loginJson[".issued"].stringValue 
     self.expries = loginJson[".expires"].stringValue 
    } 


} 

ist diese in der Lage eine andere Funktion JSON-Daten in einem anderen Viewcontroller oder müssen wir zugreifen? wenn dies in der gleichen Funktion möglich ist, wie könnte es gelöst werden ?

+1

Suche in google..there ist viel zB zu bekommen gibt es Daten zwischen viewcontollers passiert –

+0

ya i Daten zwischen View-Controller passieren kann, aber meine Frage ist JSON-Daten Übergang von Login-Funktion zu einem anderen Ansicht-Controller und Ich habe OAUTH, um mich anzumelden, damit ich verwirrt werde, kannst du diesem helfen? –

+0

@BikeshThakur: Suche nach Delegation Muster –

Antwort

1

ersetzen dies mit Ihrem Code

func getlogin(){ 
     let headers = [ 
      "Content-Type": "application/x-www-form-urlencoded" 
     ] 
     let parameters = [ 

      "UserName": username_textfield.text! as String, 
      "Password": password_textfield.text! as String, 
      "grant_type": "password", 
      ] 


     //  let url = NSURL(string: "http://192.168.100.5:84/Token")! 
     Alamofire.request("http://192.168.100.5:84/Token", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: headers).responseJSON { (response:DataResponse<Any>) in 

      switch(response.result) { 
      case.success(let data): 
       print("success",data) 
       let statusCode = (response.response?.statusCode)! 
       if statusCode == 200{ 
        self.view.makeToast(message: "Welcome !!") 
//     self.performSegue(withIdentifier: "mainview", sender: self) 

       }else{ 
        self.view.makeToast(message: "Username or password invalid") 
       } 
       self.myResponse = JSON(data) 
       let login = Login(loginJson: self.myResponse) 
       DispatchQueue.main.async(execute: {() -> Void in 
        self.performSegue(withIdentifier: "pass_data", sender: login)      
            }) 

      case.failure(let error): 
       print("Not Success",error) 
      } 

     } 
    } 

Sie können dies auch hinzufügen

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     if segue.identifier == "pass_data" { 

      if let eventsVC = segue.destination as? secondViewController, 

       let loginData = sender as? Login { 

       eventsVC.login_details = loginData 

      } 

     } 

    } 

in Ihrem zweiten View-Controller shuold Sie Variable wie diese var login_details hinzufügen: Login? JSON-Daten

+0

Haben Sie Ihren Code durch meinen ersetzen ??? – seon

+0

ya ersetze Code, aber seine nicht übergebenen Daten können Sie einen Vorschlag machen, um Daten an secondviewController –

+0

zu übergeben Ich habe bearbeitet. Versuchen Sie dies und sagen Sie mir, es funktioniert oder nicht ??? – seon

0

Sie können den Wert unter Verwendung Schließung übergeben.

Create-Methode

func loginAccess(callBack: (_ responseObject : [Any]) -> Void) -> Void{ 
     if let JSON = response.result.value { 
          callBack(JSON as Any) // here data passed 
         } 
        } 
        if statusCode == 200{ 
         self.view.makeToast(message: "Welcome !!") 
         self.performSegue(withIdentifier: "mainview", sender: self) 

        }else{ 
        self.view.makeToast(message: "Username or password invalid") 
          callBack([:] as Any) 

        } 
     } 

Methode aufrufen

self.loginAccess { (responseObject) in 
      print(responseObject) // this is your data 
      //create your model here 

     } 
+0

es sagen "Tupel Element kann nicht zwei Beschriftungen" und "Single-Argument-Funktion Typen benötigen Klammern" in dieser Zeile (callBack: (_ responseObject: [Beliebige] -> Void)) -> Void, ,, Bitte erklären Sie das ?? –

+0

Ich habe meinen Code bearbeitet es gibt einige Änderungen und @escaping selbst proviede während mit diesem Code callBack (JSON als Any) –

+0

irgendein Problem gibt es? – KKRocks

Verwandte Themen