2016-05-20 4 views
0

kann ich nichts mehr ausführen Ich arbeite mit Swift zum ersten Mal. Ich feuere Web-API wie unten gezeigt, und ich bekomme Daten erfolgreich, aber ich bin nicht in der Lage, etwas in NSURLConnection.sendAsynchronousRequest schwarz durchzuführen. Ich drucke das Ergebnis, nachdem ich die Methode "segue perform" geschrieben habe und es nicht zu einem anderen ViewController drängt und es im selben View-Controller bleibt. Danke im Voraus.Nach AsynchronusRequest in Swift

NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in 
      //SwiftLoader.hide() 
      do { 
       if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary { 
        SwiftLoader.hide() 
        print("ASynchronous\(jsonResult)") 
        self.performSegueWithIdentifier("Home", sender: self) 
       } 
       self.hideView() 
      } 
      catch let error as NSError 
      { 
       print(error.localizedDescription) 
      } 
     }) 

Antwort

2

Wenn Sie ein Segment ausführen möchten, sollte es auf dem Hauptthread ausgeführt werden, nicht in einem Hintergrundthread. NSURLConnection.sendAsynchronousRequest wird im Hintergrundthread ausgeführt. Wenn Sie also Änderungen an der Benutzeroberfläche vornehmen möchten, sollten Sie main thread verwenden. Verwenden Sie also so: -

NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in 
     //SwiftLoader.hide() 
     do { 
      if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary { 
       SwiftLoader.hide() 
       print("ASynchronous\(jsonResult)") 
       dispatch_sync(dispatch_get_main_queue(), { 
        self.performSegueWithIdentifier("Home", sender: self)           
       }) 

      } 
      self.hideView() 
     } 
     catch let error as NSError 
     { 
      print(error.localizedDescription) 
     } 
    }) 
2

Sie müssen die UI-Operation am Haupt-Thread durchführen. Momentan machst du es auf Worker-Thread. Mit Hilfe von GCD, erhalten Haupt-Thread und Versand Segue-Operation darauf.

dispatch_async(dispatch_get_main_queue(),{ 

    print("ASynchronous\(jsonResult)") 
    self.performSegueWithIdentifier("Home", sender: self) 
}) 
+0

Ich habe nicht verstanden, können Sie mir bitte etwas mehr sagen –

Verwandte Themen