2017-09-30 1 views
0

Ich erstelle eine einfache Watch-Kit-App, die mir den lokalen Bus-Zeitplan zeigt. Um die Zeitpläne zu erhalten, muss ich eine Anfrage an die Website des Busunternehmens stellen und den HTML-Code parsen. (Sie haben keine öffentliche api ....)Watch Kit Asynchronus Daten

Alamofire wird verwendet, um eine Anfrage zu machen und dann den HTML-Code mit SwiftySoup zu analysieren. Die Daten werden dann in einem Array mit Strukturen gespeichert und die Tabelle wird erstellt. Dann wird das Array in einer JSON-Datei gespeichert. Wenn die App zwangsweise geschlossen wird und erneut startet, überprüft die App, ob die aktuelle Zeit nach der ersten Buszeit liegt. Wenn dies der Fall ist, fordert die App die Website erneut auf, um die nächsten Zeitpläne zu erhalten. Andernfalls erstellt sie einfach die Tabelle mit der Anzahl der Zeitpläne.

Seit Alamofire i Wenn eine asynchrone Anforderung ausgeführt wird, beendet die App den Startvorgang, auch wenn sie keine Daten enthält. Wie kann ich die App "erzwingen", auf die Anfrage und das Parsen zu warten, bevor die Benutzeroberfläche angezeigt wird?

+0

Sie können nicht, weil die App getötet wird. Fügen Sie eine Benutzeroberfläche für den Ladezustand hinzu. –

+0

Okey. Kann ich die App einen weiteren Interface Controller im Ladezustand laden lassen und darauf warten, dass sie beendet wird und dann die Tabelle anzeigen? Und wenn ich die "Homebutton" -Taste drücke und die App erneut öffne, wie kann ich die App überprüfen, ob sie die Daten erneut aktualisieren muss? – PureRushh

Antwort

0

Wie Josh Caswell erwähnt, ist es nicht möglich. So erstellte UI für den Ladezustand.

Wenn die Anwendung keine Zeitpläne zwischengespeichert hatte oder die zwischengespeicherten Daten alt waren, schob die App den Ladeschnittstellencontroller. Als der Ladevorgang beendet war, öffnete sich der Schnittstellencontroller selbst und der Hauptschnittstellencontroller wurde mit der korrigierten Benutzeroberfläche gestartet.

Verwandte Themen