Comme je vous écris sur le titre, j'utilise Alamofire pour obtenir des données, puis le décoder et l'ajouter à la liste "Articlelist" puis essayez de l'insérer à la tableView, mais il semble que la TableView soit chargée à Tout d'abord, puis les données sont collectées et insérées sur la liste.
Je voudrais d'abord rendre l'insertion, puis charger la tableView mais je ne trouve pas de solution. Je viens de m'essayer en mettant de reporter dans la vueDidLoad et faites de la tableview.realoddata, mais ça ne marche pas ... Quelqu'un pourrait-il me donner une idée de cette situation?
3 Réponses :
code à l'intérieur car Pour corriger votre code, il suffit de recharger la vue des données après avoir ajouté les articles p> de reporter code> est exécuté après "retour" de la méthode ou par exemple après le retour du cycle de courant de certaines boucles
ViewDidLoad code> retourne
VOID < / Code>, cette méthode revient immédiatement après
updateeNewsdata () code> est appelé et il n'attend pas qu'une autre méthode appelée à partir de retours intérieurs ou après le code à l'intérieur de la fermeture est exécutée (
de repore < / code> n'est pas exécuté après que la fermeture est exécutée depuis la fermeture intérieure, vous ne pouvez pas retourner la valeur pour la méthode où la fermeture a été déclarée). p>
Le bloc de reportage strong> sera exécuté lorsque l'exécution quitte la portée actuelle, car votre demande est un bloc asynchronisé qui signifie que lorsque la tableview.reloaddata () est appelée la demande est toujours en cours. Vous devez appeler ReloaderData lorsque la demande est terminée: p> ... p>
au lieu d'écrire Exemple de code: p> tableview.reloaddata () code> in
ViewDidLoad code> Méthode, vous devez l'écrire après avoir terminé Ajout de tous les articles
dans le code code> dans le
ArticleLelist Code> Array.
ViewDiDload () code> devrait être comme: p>
func updateNewsData() {
getNewsData() { (articles) in
guard let articleArray = articles?.articles else
{fatalError("cannot get articles.")}
articleList.append(contentsOf: articleArray)
DispatchQueue.main.async {
tableView.reloadData()
}
}
}