2017-03-03 4 views
1

Je fais des notifications push. S'il n'y a pas de données dans la base de données, elles ont été téléchargées avant l'affichage. J'ai fait un intervalle de temps en utilisant Grand Central Dispatch, mais ce n'est pas juste parce que par exemple si l'utilisateur est une application Internet faible tombe.Comment faire barrière dans swift 3

Comment retarder avec barrière de GCD l'affichage des données avant de télécharger des données?

Ce code avec un intervalle de temps:

if equal == false { 
    let url = "https://****.**/json/post/\(data)" 
    self.download.getLastestNews(url) 
} 


let when = DispatchTime.now() + 2 

DispatchQueue.main.asyncAfter(deadline: when) { 
    let newsCategory = self.realm.objects(News.self).filter("newsID == \(self.id)") 
    vc.titleText = (newsCategory.first?.newsTitle)! 
    vc.fullText = (newsCategory.first?.newsFullText)! 
    vc.imageLink = (newsCategory.first?.newsImage)! 

if let tabBarController = self.window?.rootViewController { 
    tabBarController.present(vc, animated: true, completion: nil) 
    } 
} 

plate-forme iOS 9. *, iOS 3

Répondre

0

Retarder la file d'attente ne fonctionne pas toujours parce que vous avez dit, parfois la connexion Internet est trop lent et il pourrait y avoir aucune donnée reçue, ainsi le programme peut échouer avec l'erreur. Lors du téléchargement de n'importe quoi à partir d'Internet, vérifiez les méthodes de traitement d'achèvement. A l'intérieur, utilisez le code que vous avez donné dans la fermeture de DispatchQueue.