分别获取数据和相关图像,并将它们链接起来

时间:2016-07-30 15:09:19

标签: ios swift asynchronous uicollectionview alamofire

当用户搜索时,我从一个来源获取一些数据,并根据我收到的内容,我正在使用其他来源获取相关图像。这是异步发生的。一个搜索结果有一个特定的图像(通常我得到4-6个结果,我需要获取图像)。 事实上,图像与错误的结果数据相关联,主要是因为它发生异步并且我的代码处理不好。

看看这里

  1. 搜索结果给出了5个结果

  2. 在collectionView:cellForRowAtIndexPath中,我为每个结果获取一个图像,并将其添加到单元格的imageView中。

  3. 有时图像可能会放错位置

  4. 我相信我可以将图像添加到结果数组中,但我需要一种方法将图像和正确的结果数据链接在一起。

    人们通常做什么?

    编辑: 执行asynchrequest获取图像。

    func willReturnBookCoverFromNB(url: String, completionHandler: (imageD: NSData?, error: NSError?)-> ()){
    
        let safeurl = url.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
       let task =  Alamofire.request(.GET, safeurl!).response { (request, response, data, error) in
            print(request)
            print(response)
            if(error != nil){
                completionHandler(imageD: nil, error: error)
                return
            }else{
                completionHandler(imageD: data, error: nil)
                return
            }
    
    
        }
        task.resume()
    }
    

    在collectionView:cellforRowAtIndex

    bookImage.willReturnBookCoverFromNB(baseUrl, completionHandler: { (imageD, error) in
                            if error == nil{
                                //There is no error. Must be a image then..
                                let imageData = UIImage(data: imageD!)
    
                                cell.bookCover.image = imageData
                            }else{
                                let alert = displayAlert("Error!", text: "\(error!)")
                                self.presentViewController(alert, animated: true, completion: nil)
                            }
                        })
    

    每次用户在searchField中输入时,collectionView和搜索结果数据都会重新加载。

0 个答案:

没有答案