我怎样才能在collectionview或tableview中刷新或重新加载新添加的数据,而不是重新加载所有数据?现在我正在使用以下代码,但它查询数据库服务器以获取所有数据然后重新加载所有内容。例如,我只在服务器上上传一张照片,所以我只想获取该照片并重新加载collectionview,仅用于这个新添加的照片不加载每一个。我怎样才能做到这一点?谢谢!
func loadPosts(){
let query = PFQuery(className: "posts")
query.whereKey("username", equalTo:PFUser.current()!.username!)
query.limit = page
query.findObjectsInBackground { (objects, error) in
if error == nil {
self.picArray.removeAll(keepingCapacity: false)
if let objects = objects{
for object in objects{
self.picArray.append(object.value(forKey: "pic") as! PFFile)
}
}
self.collectionView?.reloadData()
} else{
print(error!.localizedDescription)
}
}
}
集合视图功能
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!)
} else {
print(error!.localizedDescription)
}
}
return cell
}
答案 0 :(得分:0)
最终我建议将图片请求移出cellForItem
,因为根据用户滚动行为会调用它,但是现在这样可行。
您需要检查图片是否已加载,然后使用reloadItems
代替reloadData
,以便cellForItem
中的新版块如下所示:
if (cell.picImg.image == nil) {
picArray[indexPath.row].getDataInBackground { (data, error) in
if error == nil {
cell.picImg.image = UIImage(data: data!)
collectionView.reloadItems(at: indexPath) //reload only this item once the image is retrieved
} else {
print(error!.localizedDescription)
}
}
}