2015-10-22 1 views
0

Dans swift je télécharge des données dans swift à mon application iOS. Cela fonctionne très bien, bien que ce qui finit par se produire, il peut prendre jusqu'à 20 secondes pour le charger même si je suis sur une connexion rapide. Je ne comprends pas pourquoi cela arrive. Je pensais presque à télécharger toutes les données avant l'ouverture de l'application, même si je ne veux pas faire cela parce que je sais qu'il est possible d'accélérer ce que je sais est possible parce que des applications comme YouTube et Facebook peuvent charger et rafraîchir en moins de 20 secondes Heck, YouTube charge les vidéos en moins de temps. Je sais que mon serveur n'est pas aussi rapide qu'il y a mais je sais que mon serveur est plus rapide que ça. Je tiens à vous rappeler que la page ne se charge pas rapidement. S'il vous plaît aider. Voici le code NSUrlSession.NSUrlSession en cours d'exécution lente dans Swift

func contactApiUrl(){ 
     let url = "http://www.example.com" 

     let nsUrl = NSURL(string:url) 
     let nsUrlRequest = NSURLRequest(URL: nsUrl!) 
     let task = NSURLSession.sharedSession().dataTaskWithRequest(nsUrlRequest){ 
      (data, response, error) in 
      if let dat = data{ 
       let contents = NSString(data:dat, encoding:NSUTF8StringEncoding) as! String 
     self.aboutText.text = contents 
      } 

     } 
     task.resume() 
    } 

Je tiens à remercier toute personne qui peut m'aider à l'avance.

+0

Il ne fonctionne pas lentement. Toutes les mises à jour de l'interface utilisateur doivent être effectuées dans la file d'attente principale. Il suffit d'ajouter dispatch_async –

+0

Je ne comprends pas ce que vous voulez dire. Pouvez-vous s'il vous plaît expliquer ce qu'est la file d'attente principale et comment j'ajoute dispatch_async? –

+0

J'ai posté la réponse –

Répondre

3
func contactApiUrl(){ 
    guard 
     let nsUrl = NSURL(string: "http://www.example.com") 
    else { return } 
    NSURLSession.sharedSession().dataTaskWithRequest(NSURLRequest(URL: nsUrl)){ 
     (data, response, error) in 
     guard 
      let data = data, 
      let contents = String(data: data, encoding: NSUTF8StringEncoding) 
     else { return } 
     // All UI updates should be done at the main queue. 
     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.aboutText.text = contents 
     }) 
    }.resume() 
}