2016-07-14 6 views
0

In den letzten drei Tagen habe ich versucht, ein paar Fortschritte zu machen, aber egal, was ich versuche, ich kann nicht meinen Kopf darum drehen, wie man das löst Problem. Diese Antwort ist, was mich (denke ich) fast den ganzen Weg dorthin (aber nicht ganz): Capturing data from AlamofireRückruf für Alamofire erstellen, mit dem ich JSON manipulieren kann

Was ich versuche zu tun, ist die Anzahl der Bewertungen für eine App zu bekommen. Da Alamofire seine Netzwerkaufrufe asynchron ausführt, versuche ich einen Rückruf zu erstellen, der es mir ermöglicht, tatsächlich mit dem JSON zu arbeiten, den es zurückgibt. Im folgenden Code versuche ich, die Rezensionen JSON außerhalb meiner Alamofire-Funktion zu erhalten und sie der Variable reviewJSON zuzuordnen, damit ich damit etwas anfangen kann. Was mache ich falsch?

import UIKit 
import SwiftyJSON 
import Alamofire 


class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

let appStoreReviewsURL: String = "https://itunes.apple.com/de/rss/customerreviews/id=529479190/json" 


func getDataFromInterwebs(theURL: String, complete:(reviews: JSON) ->()) { 

    Alamofire.request(.GET, theURL).responseJSON { response in 
      guard response.result.error == nil else { 
       print("error calling GET ") 
       print(response.result.error!) 
       return 
      } 

      if let value = response.result.value { 
       let appReviewsFromAppStore = JSON(value) 
complete(reviews: appReviewsFromAppStore) 
      } 
      else { 
       print("error parsing") 
      } 

    } 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    var reviewJson = getDataFromInterwebs(appStoreReviewsURL){ completion in 
     return completion} 

     print(reviewJson) 
} 
+0

Du Parsen nicht die 'JSON' richtig. Fügen Sie Ihre json Daten ein, damit wir Ihnen besser helfen können. – Dershowitz123

+0

Hallo, der JSON ist hier zu sehen: https://itunes.apple.com/de/rss/customerreviews/id=529479190/json – Patrick

Antwort

0

Bitte versuchen Sie folgenden Weg. Prüfen Sie, ob es für Sie

// Ändern Sie Ihre getDataFromInterwebs wie diese

func getDataFromInterwebs(theURL: String, complete:(reviews: JSON) -> Void) { 

       Alamofire.request(.GET, theURL).responseJSON { response in 
        guard response.result.error == nil else { 
         print("error calling GET ") 
         print(response.result.error!) 
         return 
        } 

        if let value = response.result.value { 
         let appReviewsFromAppStore = JSON(value) 
         complete(reviews: appReviewsFromAppStore) 
        } 
        else { 
         complete(reviews: "Error occured while trying to parse data") 
         print("error parsing") 
        } 

       } 
      } 
    } 

dann in viewDidLoad funktioniert, ist wie folgt

override func viewDidLoad() { 
     super.viewDidLoad() 
     getDataFromInterwebs(appStoreReviewsURL) { (reviews) in 
      var reviewJson = reviews 
      dispatch_async(dispatch_get_main_queue(), { 
       self.didGetRattingJson(reviewJson) 
      }) 
     } 
} 

und schließlich

func didGetRattingJson(reviewJson: JSON) { 
     //do whatever you want to do here 
    } 
+0

Danke Kuntal. Es scheint aber immer noch nicht zu funktionieren - welchen Wert hat die finale Funktion datGetRattingJson? – Patrick