gpt4 book ai didi

ios - 有时单元格加载顺序不正确?

转载 作者:行者123 更新时间:2023-11-28 16:01:06 28 4
gpt4 key购买 nike

我正在尝试从 Firebase 中提取按时间戳排序的数据,并将其显示在 Collection View 中。

这是我使用的大部分代码:

static func loadPic(picture: String, loadSuccessBlock: @escaping (_ img: UIImage) -> Void) {
let requested = URLRequest(url: URL(string: picture)!)

URLSession.shared.dataTask(with: requested) {data, response, err in
if err != nil {
print(picture, err)
} else {
DispatchQueue.main.async {
if let imageToCache = UIImage(data: data!) {
MainVC.imageCache.setObject(imageToCache, forKey: picture as NSString)
loadSuccessBlock(imageToCache)
}
}

}

}.resume()
}


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

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

let post = initiationsArray[indexPath.row]
let picture = NSString(string: post.imageURL!)

if let imageFromCache = MainVC.imageCache.object(forKey: picture as NSString) {
cell.cellImage.image = imageFromCache
} else {
MainVC.loadPic(picture: picture as String, loadSuccessBlock: { img in
// to prevent case of updating wrong cell
// we request to reload cell data
if (nil != self.collectionView.cellForItem(at: indexPath)) {

self.collectionView.reloadItems(at: [indexPath])
}
})
}

return cell
}

firstRef.queryOrdered(byChild: "timestamp").observeSingleEvent(of: .value) { (snapshot: FIRDataSnapshot) in
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {

secondRef.child(snap.key).observeSingleEvent(of: .value, with: { (snapshot: FIRDataSnapshot) in

if let dict = snapshot.value as? Dictionary<String, Any>{
let key = snapshot.key
let post = Post(postKey: key, postData: dict)

DispatchQueue.main.async {
self.initiationsArray.insert(post, at: 0)
self.collectionView.reloadData()

}

}
})


}
}

所以第一位是我如何处理从缓存中下载/拉取,第二位是我的 cellForRow,第三位是我对 Firebase 的调用。

难以调试的原因在于,有时帖子是有序的,有时则不是。通常当我完全清除我所有的 firebase 数据并重新开始然后开始添加帖子时,它们会加载到正确的位置。当我第二天回来或者我关闭应用程序并重新加载它时,帖子通常会开始随机加载到列表中或开始插入列表的末尾..这没有意义,因为我' m 明确表示要在 0 处插入。

100% 的时间我完全重置我的数据并开始重新正确加载帖子。

关于如何解决此问题或可能导致此问题的任何想法?

最佳答案

未定义 Collection View 和 TableView 向其数据源请求单元格的顺序。当您第一次显示 TableView 时,它通常要求单元格从最低部分到最高部分,以及每个部分的最低行到最高行,但您不应该这样假设。我还没有玩过 Collection View ,无法了解它们通常以什么顺序获取单元格。不过,同样,顺序未定义且可能会更改,您不应假设任何特定顺序。

关于ios - 有时单元格加载顺序不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41069213/

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