问题描述
我是新手 我正在尝试使用可正常工作的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
中建立网络。当然,您可以要求下载,如果需要的话,现在开始,但是您不能保留对cell
的引用,因为在下载过程中,用户可能会将单元格滚动到视线之外,并且可能需要重新使用。仍在发生。
相反,您必须将其下载到模型中,然后重新加载收集视图。