gpt4 book ai didi

iOS - 异步请求和 UI 交互

转载 作者:行者123 更新时间:2023-11-28 09:37:59 28 4
gpt4 key购买 nike

我有一个页面使用 Alamofire 从 Google Image Search API 检索图像并将它们显示在 collectionView 中。一切正常,但是当请求仍在加载时,我根本无法与 UI 交互,无论是单击按钮还是滚动 collectionView。这是正常行为吗?我希望用户至少能够在请求花费很长时间时按下后退按钮,或者在处理新请求时上下滚动 collectionView。

Alamofire.request(.GET, googleImageApiUrl, parameters: [:]).responseJSON { (request, response, JSON, error) in
if let results = JSON as? NSDictionary {
if let images = results["responseData"]!["results"] as? NSArray {
for image in images {
let url = NSURL(string: image["unescapedUrl"] as! String)!
if let data = NSData(contentsOfURL: url) {
self.imageData.append(data)
}
}

dispatch_async(dispatch_get_main_queue()) {
self.collectionView.reloadData()
}
}
}
}

总而言之,一旦发起请求,在 collectionView 重新加载其数据之前,用户无法以任何方式与页面进行交互。我想如果请求是异步的,那么我仍然可以与 UI 交互。这是 Alamofire 限制、一般限制,还是我做错了什么?

最佳答案

Alamofire 异步网络。不用担心。不过,问题可能出在这里:

let url = NSURL(string: image["unescapedUrl"] as! String)!
if let data = NSData(contentsOfURL: url) {

如果正如我所怀疑的那样,该 URL 是一个远程 URL,那么您现在正在同步 重复联网。 NSData(contentsOfURL:) 适合在主线程上通过网络获取内容。如果您要在网络上获取更多数据,请使用适当的网络代码 - 甚至可以使用更多的 Alamofire...

关于iOS - 异步请求和 UI 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30417743/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com