Je reçois des problèmes très similaires à this post, mais je ne comprends pas complètement la réponse. J'ai créé un gestionnaire d'achèvement, mais il ne semble pas fonctionner comme prévu.Swift URL Session et URL Demande ne fonctionne pas
func updateTeam(teamID: Int) {
startConnection {NSArray, Int in
//Do things with NSArray
}
}
func startConnection(completion: (NSArray, Int) -> Void) {
let url = URL(string: "http://www.example.com/path")
var request : URLRequest = URLRequest(url: url!)
request.httpMethod = "POST"
let postString = "a=\(Int(teamInput.text!)!)"
request.httpBody = postString.data(using: .utf8)
let dataTask = URLSession.shared.dataTask(with: request) {
data,response,error in
print("anything")
do {
if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary {
self.teamResult = jsonResult
print(jsonResult)
}
} catch let error as NSError {
print(error.localizedDescription)
}
}
dataTask.resume()
completion(NSArray(object: teamResult), Int(teamInput.text!)!)
}
Rien dans la déclaration dataTask semble fonctionner, ou du moins il ne se termine pas avant d'essayer d'utiliser les données ont donné lieu. Quel est le problème avec ce gestionnaire d'achèvement?
Merci d'avance!
Je pense que 'achèvement (NSArray (objet: teamResult), Int (teamInput.text!)!) 'devrait aller là où vous avez' print (jsonResult) '. Comme c'est le cas maintenant, vous démarrez la tâche de données, puis appelez immédiatement le gestionnaire d'achèvement avec (probablement) 'nil'. Si vous définissez un point d'arrêt dans votre gestionnaire de datatask (sur l'une des méthodes d'impression), les points d'arrêt sont-ils atteints? – keithbhunter
Je vous recommande fortement de rechercher Alamofire et l'utiliser si vous le pouvez pour ce projet, il rend le code comme cela beaucoup plus facile à écrire –
oui, déplacer le gestionnaire de la tâche de données a semblé fonctionner magnifiquement. Merci beaucoup! –