Ios UICollectionView滑块图像未显示

Ios UICollectionView滑块图像未显示,ios,uicollectionview,swift4,kingfisher,Ios,Uicollectionview,Swift4,Kingfisher,我不熟悉斯威夫特 我正在尝试使用工作正常的UICollectionView制作滑块 但当我尝试实现缓存(Kingfisher)时,它不会在滑块中显示我的图像 这是我的实现 extension CompanyViewController: UICollectionViewDelegate, UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSec

我不熟悉斯威夫特 我正在尝试使用工作正常的UICollectionView制作滑块

但当我尝试实现缓存(
Kingfisher
)时,它不会在滑块中显示我的图像

这是我的实现

extension CompanyViewController: UICollectionViewDelegate, UICollectionViewDataSource {


func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
   if(self.sliderModel != nil){
    return (self.sliderModel?.data.count)!
   }else{
    return 0
    }
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! BannerCollectionViewCell
    
     if(self.sliderModel != nil){
        
        if(self.sliderModel.data.count == indexPath.row){
            let url = URL(string:(self.sliderModel?.data[indexPath.row].experienceImage.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed ))!)
            cell.sliderImageView.kf.setImage(with: url)
        }else{
            //cell.sliderImageView.image = self.imgArr[indexPath.row]
            let url = URL(string:(self.sliderModel?.data[indexPath.row].experienceImage.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed ))!)
            cell.sliderImageView.kf.setImage(with: url)
        }
    }
    
    return cell
}
}
但图像在我的滑块中不可见,我检查了我的模型,我从服务器得到响应,图像在图像url中。 可能是我在错误的地方下载了图像

这就是我获取jsondata并在模型中分配它的方式

func getBannerData(){
         dispatchGroup.enter()
        let defaults = UserDefaults.standard
        let appId = defaults.string(forKey: Constants.APPID)
        let token = "Bearer "+defaults.string(forKey: Constants.TOKEN)!
        if let url = URL(string: Constants.EXPERIENCE_BANNER_CENTER+appId!){
            var request = URLRequest(url: url)
            request.httpMethod = "GET"
            request.setValue(token, forHTTPHeaderField:"Authorization")
            APIManager.sharedInstance.getCall(request: request){
                (data) in
                if(!data.isEmpty){
                    do{
                        self.sliderModel = try JSONDecoder().decode(SliderModel.self, from: Data(data.utf8))
                        DispatchQueue.main.async {
                            self.pageView.numberOfPages = (self.sliderModel?.data.count)!
                            self.sliderCollectionView.reloadData()
                           
                        }
                        self.timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(self.changeImage), userInfo: nil, repeats: true)
                        
                        self.stopActivityIndicator()
                        self.dispatchGroup.leave()
                    }
                    catch{
                        self.stopActivityIndicator()
                        self.showAlertMessage(alertMessage: Constants.COMMON_ERROR)
                    }
                    
                }
            }
        }
    }
谁能告诉我我做错了什么


如果您有任何帮助,我们将不胜感激。

您所做的一切都是错误的。您不能直接在
cellForItem
中建立网络。如果需要,您可以要求立即开始下载,当然,但您不能保留对
单元格的引用,因为用户可能会将单元格滚动到视图之外,并且可能需要在下载仍在进行时重新使用该单元格


相反,您必须下载到模型中,然后重新加载集合视图。

存在一些可疑逻辑,可能与缓存问题无关。为什么要将项目数固定为10而不是sliderModel的长度?为什么要访问第1行的模型?对于row==0,这是一个负数组索引。Hi@danh我更新了我的问题好吧,现在我认为条件的两个分支是相同的,滑块模型上的nil检查(在cellForItem中)是多余的,但是如果您仍然遇到图像问题,这些并不能解释图像问题。作为一个学习步骤,我会尝试向自己证明,跳过所有集合视图的复杂性,我是否可以从我的模型中获取一个图像url,并使用它初始化挂在主视图上的单个图像视图。嗨@danh,很抱歉这么复杂,我只尝试了一个图像,只有一个图像是可见的,但它不会滚动,也不会下载第二个图像,但如果我在
cellForItem
中分配之前尝试下载图像,效果会很好。我猜这与
cellForItem
@danh有关,我也更新了我的问题,添加了一些细节和codeHi@matt你能分享我能提供的任何链接吗refer@matt-我不太了解OP的缓存图像视图库,但这些库通常保留图像视图本身,并在完成网络任务时更新。