2016-04-14 8 views
0

Ich versuche eine Antwort vom Server zu behandeln, und ich empfange die Antwort, es dauert jedoch eine Weile, um den Rest fortzusetzen .. Überraschenderweise funktioniert Drucksachen gut und ich überprüfe die Echtzeit Server ändert sich, und es funktioniert auch gut. Es liegt also am xcode.Funktion dauert, um nach Erhalt der Antwort fortzufahren

Nach Erhalt der Antwort und überprüfen, ob es Erfolg ist oder nicht, überprüfe ich ..

// Received HTTP Response 

    if let status = json["status"].string { 

     if status == "success" { 
        print("C") 
        activityView.stopAnimating() 
        activityView.removeFromSuperview() 

        self.someAnimation() 
        print("D") 
     } else { 
      ... 
     } 
    } 

Überraschenderweise C & D sofort gedruckt werden, aber die Aktivität Animation scheint nicht zwischen zu stoppen in. Es dauert etwa 10 weitere Sekunden, um abgeschlossen zu werden und den activityIndicator zu stoppen und zu entfernen. Die benutzerdefinierte Animation someAnimation() wird auch gleichzeitig mit dem activityIndicator fortgesetzt.

Ich verstehe, es ist ein asynchroner Thread, aber muss nicht activityIndicator stoppen und fortfahren, wie es print("D") erreicht?

+0

Ich glaube, Sie beantwortet sie in Ihre eigene Frage. Es ist asynchron - einigeAnimation wird aufgerufen, und dann wird die Anweisung gedruckt. – Neel

+0

Stellen Sie sicher, dass Sie activityView.stopAnimating() im Hauptthread aufrufen und nicht im Hintergrundthread. –

+0

Sie sollten alle UI-Sachen im Hauptthread machen. – heximal

Antwort

1

Ich denke, Sie führen UI-Aufgaben auf einem Hintergrund-Thread, was zu einem undefinierten Verhalten führt. Eine Möglichkeit, dies zu vermeiden, ist die Benutzeroberfläche Methodenaufrufe in einem dispatch_async wickeln:

// Received HTTP Response 

if let status = json["status"].string { 

    if status == "success" { 
       print("C") 
       dispatch_async(dispatch_get_main_queue(), { 
        activityView.stopAnimating() 
        activityView.removeFromSuperview() 

        self.someAnimation() 
       }); 

       print("D") 
    } else { 
     ... 
    } 
} 
+0

Es gibt einen Fehler für mich ''^'ist kein Präfix unärer Operator':/ – senty

+0

Bearbeiten: Löschen^hat es funktioniert! Danke vielmals!!! – senty

+0

Kein Problem. Ich habe die Antwort behoben. – Jelly