【发布时间】:2021-01-21 05:55:42
【问题描述】:
我是 swift 新手 我正在尝试使用 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)
}
}
}
}
}
谁能指出我做错了什么
任何帮助将不胜感激
【问题讨论】:
-
有一些可疑的逻辑可能与缓存问题无关。为什么将项目数固定为 10 而不是sliderModel 的长度?为什么要访问第 1 行的模型?对于 row == 0,这是一个负数组索引。
-
嗨@danh 我更新了我的问题
-
好的,现在我认为条件的两个分支是相同的,并且对滑块模型(在 cellForItem 中)的 nil 检查是多余的,但是如果您仍然遇到这些并不能解释图像问题它。作为一个学习步骤,我会尝试向自己证明,跳过所有集合视图的复杂性,是否可以从我的模型中获取图像 url 并使用它来初始化挂在主视图上的单个图像视图。
-
嗨@danh,抱歉太复杂了,我只尝试了一张图片,只有一张图片可见,但它不会滚动,也不会下载第二张图片,但是如果我在分配@之前尝试下载图片987654324@ 它工作正常。我的猜测是与
cellForItem有关 -
@danh 我也更新了我的问题,添加更多细节和代码
标签: ios uicollectionview swift4 kingfisher