你好,我一直在嘗試很多,四處尋找,但我無法找到一個很好的解決方案,我的問題。如何等待,直到alamofire圖像請求完成
問題是我在一個函數中做了2個請求,並且第一個函數完成了,然後它在主線程上執行了updateUI函數,而不是等待第二個下載完成。
我知道我做錯了什麼,但在我看來,這兩個請求在不同的線程上工作,這就是爲什麼updateUI只會在第一次下載完成後觸發。
是否可以使用dispatchqueue?我不知道如何completionhandlers工作或者悲哀..
我不能看到我有什麼要從他們的github頁面使用,即時通訊相當新的在斯威夫特。
請不要將其設置爲重複。真的很感謝它
func getMovieData(){
self.posterLoading.startAnimating()
//Set up URL
let testCall: String = "https://api.themoviedb.org/3/discover/movie?api_key=935f5ddeed3fb57e&language=en-US&sort_by=popularity.desc&include_adult=false&include_video=false&page=1&with_genres=12"
Alamofire.request(testCall).responseJSON { response in
//print(response.request) // original URL request
//print(response.response) // HTTP URL response
//print(response.data) // server data
//print(response.result) // result of response serialization
if let json = response.result.value as? Dictionary<String,AnyObject> {
if let movies = json["results"] as? [AnyObject]{
for movie in movies{
let movieObject: Movie = Movie()
let title = movie["title"] as! String
let releaseDate = movie["release_date"] as! String
let posterPath = movie["poster_path"] as! String
let overView = movie["overview"] as! String
let movieId = movie["id"] as! Int
let genre_ids = movie["genre_ids"] as! [AnyObject]
movieObject.title = title
movieObject.movieRelease = releaseDate
movieObject.posterPath = posterPath
movieObject.overView = overView
movieObject.movieId = movieId
for genre in genre_ids{//Genre ids, fix this
movieObject.movieGenre.append(genre as! Int)
}
Alamofire.request("http://image.tmdb.org/t/p/w1920" + posterPath).responseImage {
response in
debugPrint(response)
//print(response.request)
//print(response.response)
//debugPrint(response.result)
if var image = response.result.value {
image = UIImage(data: response.data!)!
movieObject.poster = image
}
}
self.movieArray.append(movieObject)
print("movie added")
}//End of for each movie
DispatchQueue.main.async(){
print("is ready for UI")
self.updateUI()
}
}
}
}//End of Json request
}//End of getmoviedata
func updateUI(){
uiMovieTitle.text = movieArray[movieIndex].title
uiMoviePoster.image = movieArray[movieIndex].poster
}
是啊,謝謝!但我仍然有同樣的問題。我在for循環中爲JSON中的每個對象執行第二個請求。我試過叫它,但現在工作。仍然是同樣的問題。有沒有更好的方法來實現這一點?基本上,我想爲每個電影對象,我讓我也想下載該電影的海報 – Pr0tonion