2017-02-01 1 views
-1

Ich weiß nicht, wie man es richtig setzt, also werde ich in Bildern zeigen.Wie hole ich JSON-Daten in einer Kette von Links und lege sie demselben Modell bei?

Ich erstelle zuerst URLSession, Daten von JSON abrufen, einschließlich Links zu Daten, die ich im selben Modell verwenden möchte.

ersten Link:

SchreenShot

Von der ersten Anfrage habe ich Links zu anderen Informationen, die ich in der gleichen Tabelle verwenden möchten:

Links von einem ersten Link:

ScreenShot

Ich versuche, Daten von beiden ersten und zweiten Link zu holen und in einem Datenmodell/Tabelle/Zelle zusammenzufassen.

Ich muss noch URLSession machen, aber ich kann nicht verstehen, wie Informationen zusammengefügt werden. Ist es möglich, einen URLSession in einem anderen zu feuern? Irgendwelche Vorschläge, wie man es macht?

+0

bitte fügen Sie Ihren Code auch als Text hinzu. Wählen Sie den Code und drücken Sie die Taste '{}', dann wird eine Einrückung von 4 Leerzeichen und wird als Code angezeigt. (Sie können die Bilder verlassen) – muescha

+0

10 ok - Json Daten sind frei auf der Api Homepage – muescha

+0

Senden Sie eine Nachricht, um diese Frage zu löschen, da ich Problem mit Code beschreiben möchte. – odvan

Antwort

0

Ich würde empfehlen, einige Bibliotheken zu abstrahieren einiger Komplexität mit - Alamofire/SwiftyJSON

Alamofire.request(url, method: .get).responseJSON { response in 
switch response.result { 
case .success(let value): 
    let json = JSON(value) 
    //pull your links out of the json and make another request here 
    Alamofire.request(json["fixtures"]["competition"]["href"], method: .get).responseJSON { response in 
     switch response.result { 
      case .success(let value): 
      let json2 = JSON(value) 
      //handle the json from your second request 
     } 
    } 
} 

Beachten Sie, dass diese Pseudo-Code ist. Versuchen Sie nicht ausschneiden und einfügen - aber es sollte Sie in die allgemeine Richtung bringen.

+0

Es ist etwas, über das ich nachgedacht habe, setzen Sie die zweite URLSession in eine andere. Aber die App stürzte ab, als findind null einige Variablen auspackte. – odvan

+0

SwiftyJSON hilft beim Analysieren von JSON und beim sicheren Auspacken von null. Aber ohne Ihren eigentlichen Code ist es unmöglich, Ihnen mehr zu helfen. – dmorrow

0

Erstellen Sie eine job queue, in die Sie Ihre Aufgabe (= Daten abrufen) in.

Starten Sie die Warteschlange mit Ihrem Root-URL-Aufruf. Wenn es von einem asynchronen Aufruf zurückkommt, analysiere die JSON-Daten - befülle deine lokalen Strukturen als Datenspeicher. und die nächsten 1 oder 2 Links folgen Sie in die Warteschlange.

vielleicht erinnern Sie sich an die bereits abgerufene URL in einem Array, damit Sie überprüfen können, dass Sie einige Daten nicht zweimal lesen.

HINWEIS: Auf der API-Site gibt es ein Limit für Anrufgebühren. Wenn Sie eine öffentliche App erstellen, dann sollten Sie darüber nachdenken, wie Sie alle Anrufe unter 50/24h oder 50/1min cache serialisieren können.

+0

Es ist nicht öffentlich, nur für das Training. – odvan

+0

Also die Logik ist: erste Sitzung starten, Aufgabe in benutzerdefinierte erstellte Warteschlange, Daten abrufen, setzen Sie es in struct, dann erstelle ich eine andere Aufgabe, um tiefer liegende Daten zu erhalten. Wo sollte ich Tabelle neu laden und wie Zellen auffüllen? Einfach einige Daten von einer Struktur und einige Daten von anderen? Aber das Problem ist, ich muss etwas wie eine Reihe von Aufgaben tun. Zum Beispiel heute seine 8 Spiele, 16 Teams, brauche ich 16 Aufgaben? – odvan

0

Ich denke, ich fand die Lösung, sollte 'Dispatch-Gruppe' verwenden.

Verwandte Themen