2017-05-15 28 views
0

Ich habe ein Verfahren, welches Daten von einer API-Anforderung ruft:session.dataTask Arbeits Swift nicht

let session = URLSession.shared 
    let url = URL(string: "http://eventregistry.org/json/article?conceptUri=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FAfghanistan&lang=eng&action=getArticles&articlesSortBy=date&resultType=articles")! 

    let task = session.dataTask(with: url) { (data, _, _) -> Void in 
     if let data = data { 
      print(JSON(data: data)) 
      completion() 
     } 
    } 
    task.resume() 

Die Verbindung perfekt funktioniert, wenn sie durch einen Browser, jedoch, wenn die Leitung in XCode durch Linie Debuggen keiner der Code in der let-Task = session.dataTask wird ausgeführt und der Ausdruck wird nicht im Protokoll gedruckt.

Ich laufe durch Emulator und mein Laptop hat Internet, ich bin nur nicht sicher, warum das nicht funktioniert.

Versteht jemand warum?

+0

Wenn Sie "Zeile für Zeile debuggen" sagen, lassen Sie den Runloop laufen? – Ssswift

+0

@Ssswift Entschuldigung, das wurde nicht eingestellt. Es wird jetzt ausgeführt, aber aus irgendeinem Grund ist der JSON, der abgerufen wird, null? Obwohl ich bei der Anforderung im Browser alle Daten von der Anfrage – KTOV

+0

abruft, habe ich diese in ein neues Projekt in Xcode eingefügt, die Print/Completion Zeilen wurden in einen einfachen NSLog von 'data.count' geändert (da ich es nicht weiß) was Ihre "JSON" -Klasse/Struktur ist, und änderte "http" zu "https" (gemäß der Xcode-Warnung) und führte es aus. Es zeigt 15594 Bytes an, die zurückgegeben werden. Ich habe im Complete-Handler sogar einen Haltepunkt gesetzt, der ausgelöst wurde. Können Sie genauer erklären, wie Sie das im Debugger ausführen? – Ssswift

Antwort

0

Versuchen Sie, es auf diese Weise zu schreiben. und versuchen Sie auch, die "Leere" zu vermeiden

Zuerst müssen Sie die URLRequest machen.

Beispiel:

let urlRequest = URLRequest(url: URL(string: "Your url/API links here")!) 

let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in { 

    //Your codes here 
    } 

task.resume() 
} 

Hoffe, es hilft. Wenn Sie weitere Erläuterungen benötigen, werde ich eine Beispielantwort veröffentlichen, um die Registrierungsartikel abzurufen.