gpt4 book ai didi

ios - 为什么 tableview 没有显示正确的图像?

转载 作者:行者123 更新时间:2023-11-30 11:38:30 24 4
gpt4 key购买 nike

我有两个Viewcontroller A和B。A将下载collectionview中的所有照片,然后我可以单击单个单元格转到Viewcontroller B,这是仅显示从A传递的单个图像的表格 View 。

但是第一次午餐时应用程序工作正常,但一旦我在 Collection View 中添加新照片,然后我单击这张新照片转到 View Controller B,但 B 没有显示正确的照片,显示其他照片。我在 viewcronller A 和 B 中打印出照片数据 postImg 数据相同,但 B 未显示正确的照片。为什么?当我重建程序时,它正在工作,问题似乎只在我添加新照片时发生。

这是从服务器加载图片的代码

func loadPosts(){

let query = PFQuery(className: "posts")
query.whereKey("username", equalTo:PFUser.current()!.username!)
query.skip = self.picArray.count // skip the already loaded images

query.findObjectsInBackground { (objects, error) in

if error == nil {

if let objects = objects{
for object in objects{
self.collectionView?.performBatchUpdates({
let indexPath = IndexPath(row: self.uuidArray.count, section: 0)
self.uuidArray.append(object.value(forKey: "uuid") as! String)
self.picArray.append(object.value(forKey: "pic") as! PFFile)
self.collectionView?.insertItems(at: [indexPath])
}, completion: nil)

}
}
} else{
print(error!.localizedDescription)
}
}
}

然后var postImgData = [UIImage]()是用于保存从上述函数下载的所有照片的数组,该数组在CLASS Viewcontroll A的开头定义。

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return picArray.count
}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
//define cell

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! pictureCell


picArray[indexPath.row].getDataInBackground { (data, error) in

if error == nil {
cell.picImg.image = UIImage(data: data!)
self.postImgData.append(UIImage(data: data!)!)


} else {
print(error!.localizedDescription)
}
}
return cell
}

然后我单击单元格转到 View Controller B 。 postImg 在 Viewcontroller B 的开头定义为全局可行,以获取您单击 Viewcontroller A 单元格的图像日期。

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
postImg = postImgData[indexPath.row]
let post = storyboard?.instantiateViewController(withIdentifier: "postVC") as! postVC
self.navigationController?.pushViewController(post, animated: true)

}

然后在Viewcotnroller B中显示照片

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! postCell

cell.picImg.image = postImg

return cell
}

最佳答案

第一:

picArray[indexPath.row].getDataInBackground { (data, error) in
if error == nil {
cell.picImg.image = UIImage(data: data!)
self.postImgData.append(UIImage(data: data!)!) <== WHY do you append array?
} else {
print(error!.localizedDescription)
}

你应该事先初始化数组并设置数据,如 self.postImgData[indexPath.row] = UIImage(data: data!)!这就是我们如何确保图像顺序正确的方法

2

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let post = storyboard?.instantiateViewController(withIdentifier: "postVC") as! postVC
// Why dont use post.postImg = postImgData[indexPath.row]?
// Do not use Global vars, because you can change it from anywhere without noticing
self.navigationController?.pushViewController(post, animated: true)
}

所以我建议将 postImg var 移动到 Controller B

关于ios - 为什么 tableview 没有显示正确的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49470922/

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