En général, il est nécessaire d'implémenter une classe pour le réseau. C'est une classe qui prendra une URL et donnera des données. Tout ceci est fait afin de ne pas marquer de contrôleurs logiques supplémentaires. J'ai rencontré un tel problème que lorsque vous créez une vue, les données ne viennent pas. C'est classe réseau:NSURLSession ne renvoie pas de données dans le premier appel
private static var dataTask: NSURLSessionDataTask?
private static var dataJSON: NSData?
private static var sessionConfig: NSURLSessionConfiguration = {
var configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.allowsCellularAccess = false
configuration.HTTPMaximumConnectionsPerHost = 2
configuration.HTTPAdditionalHeaders = ["Accept": "application/json"]
configuration.timeoutIntervalForRequest = 30.0
configuration.timeoutIntervalForResource = 60.0
return configuration
}()
static func getListObjectsBy(url: String?) -> NSData? {
let session = NSURLSession(configuration: sessionConfig)
log.debug("DataTask start")
dataTask = session.dataTaskWithURL(NSURL(string: url!)!) { (data, response, error) in
log.debug("if error = error")
if let error = error {
print(error.localizedDescription)
} else if let httpResponse = response as? NSHTTPURLResponse {
log.debug("if httpResponse")
if httpResponse.statusCode == 200 {
dataJSON = data
} else {
print("Bad request")
}
}
}
dataTask?.resume()
log.debug("DataTask Resume")
return dataJSON
}
Méthode viewDidLoad dans mon contrôleur principal:
let response = Network.getListObjectsBy("http://lb.rmc.su/api-dev/v2/wc/5")
print(String(response))
Mon journal me dit, que nul de retour de données. Notes, je suis passer entre les contrôleurs avec l'aide SWRevealViewController. Lors du rechargement du contrôleur de la vue principale, les données sont renvoyées. Qu'est-ce que je fais?
Je ne fais rien d'autre :) Il est tout le code. Malheureusement, je ne comprends pas vraiment quand utiliser la répartition asynchrone. Qu'est-ce que je fais à ce sujet? –
Je pense que votre réponse est correcte, néanmoins vous pouvez expliquer un peu plus sur la façon d'utiliser les fermetures pour transmettre les données dans l'appel asynchrone pour aider plus à la question –
Merci! Maintenant je comprends tout! :) –