2016-07-04 4 views
0

Wenn der Parameter (params) Werte falsch sind, ist es noch zu einer anderen Ansicht anmelden. In der Konsole geben sowohl der Antworthauptteil als auch der Antwortheader Werte zurück, wenn sie gedruckt werden. Wo bin ich falsch gelaufen?PerformSegueWithIdentifier wenn die Parameterwerte korrekt sind für HTTP POST-Anforderung

func login() { 
    let request = NSMutableURLRequest(URL: NSURL(string: "http://someurl/verify/")!) 
    let session = NSURLSession.sharedSession() 
    request.HTTPMethod = "POST" 

    let params = 
     [ 
      "username":username.text!, 
      "password":password.text!, 
      "deviceid":"r49rvnjff", 
      "method":"method", 
      "payload":"payload" 
     ] 
      as Dictionary<String,String> 

    print(params) 

    do { 
     request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: .PrettyPrinted) 
    } 
    catch { 
     print(error) 
     return 
    } 

    request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.addValue("application/json", forHTTPHeaderField: "Accept") 

    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 

     if error == nil {} 

     let json: NSDictionary? 
     do { 
      json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary 
     } 
     catch let dataError { 
      print(dataError) 
      let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("Error could not parse JSON: '\(jsonStr)'") 
      return 
     } 

     if let parseJSON = json { 

      let authenticated = parseJSON["authenticated"] as? String 
      print("authenticated:\(authenticated)") 
      if authenticated != "False" { 
      dispatch_async(dispatch_get_main_queue()) { 
       self.performSegueWithIdentifier("segue", sender: self) 
       } 
      } 
     } 
     else { 
      let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("Error could not parse JSON: \(jsonStr)") 
     } 
    }) 
    task.resume() 
} 

Vielen Dank im Voraus!

Antwort

0

Wie sieht Ihre ungültige Antwort aussehen? könnte es sein, dass seine „falsch“ und nicht „False“ zurückkehrt (das ist, was Sie für die Überprüfung), auf jeden Fall würde ich Ihre Antwort vom Server empfehlen zu überprüfen, so dass Sie die Parameter ein boolean sein authentifiziert haben, so können Sie Ihre optional auspacken wie so:

if let authenticated = json["authenticated"] as? Bool { 
    if (authenticated) 
    { 
     // ... 
    } 
} 

auch bemerkte ich, dass Ihr anderer Block nie da getroffen werden, um Ihre json Eigenschaft ungeöffneten ist. Ihre Serialisierung erfolgreich ist so json nicht gleich Null ist, daher die wenn lassen parseJSON = json wird immer funktionieren.

Ich würde den folgenden Ansatz vorschlagen:

if let authenticated = json["authenticated"] as? Bool 
{ 
    if (authenticated) 
    { 
     dispatch_async(dispatch_get_main_queue()) { 
      self.performSegueWithIdentifier("segue", sender: self) 
     } 
    } 
    else 
    { 
     let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("Error could not parse JSON: \(jsonStr)") 
    } 
} 

Viel Glück!

Verwandte Themen