私は、JSONのデータを取得した後、私のtableView
があまりにも早くリロードされているという奇妙な問題に遭遇しています。奇妙なことは、データを取得する前に、必要なすべてのデータをtableView
に書き込んだり、リロードした後にリロードしたりすることがあります。私は、データがnilとして返されることがあることに気付いていますが、これがなぜこのように行われているかは完全にはわかりません。テーブルビューの再読み込みが遅すぎる
var genreDataArray: [GenreData] = []
var posterStringArray: [String] = []
var posterImageArray: [UIImage] = []
override func viewDidLoad() {
super.viewDidLoad()
GenreData.updateAllData(urlExtension:"list", completionHandler: { results in
guard let results = results else {
print("There was an error retrieving genre data")
return
}
self.genreDataArray = results
for movie in self.genreDataArray {
if let movieGenreID = movie.id
{
GenrePosters.updateGenrePoster(genreID: movieGenreID, urlExtension: "movies", completionHandler: {posters in
guard let posters = posters else {
print("There was an error retrieving poster data")
return
}
for poster in posters {
if let newPoster = poster {
if self.posterStringArray.contains(newPoster){
continue
} else {
self.posterStringArray.append(newPoster)
self.networkManager.downloadImage(imageExtension: "\(newPoster)",
{ (imageData)
in
if let image = UIImage(data: imageData as Data){
self.posterImageArray.append(image)
}
})
break// Use to exit out of array after appending the corresponding poster string
}
} else {
print("There was a problem retrieving poster images")//This gets called sometimes if the poster returns nil
continue
}
}
})
}
}
DispatchQueue.main.async {
self.genresTableView.reloadData()//This is reloading too early before the data can be retrieved
}
})
}
補完ブロックに 'reloadData()'を意図的に含めなかったのですか?検索は非同期で行われる可能性が高いため、データが完全に取得される前にデータの再ロードが行われる可能性があります。 –