【问题标题】:PFQuery in TableCell Cause Images to JumpTableCell 中的 PFQuery 导致图像跳转
【发布时间】:2017-11-09 12:18:29
【问题描述】:

所以我进行了研究,但没有发现与我的情况相似的任何东西。所有相关代码将在下面发布。我正在为我的后端使用解析,并试图用人们发布的图像创建一个提要。图像和用户名加载正常,但由于显示名称和个人资料图片位于单独的文件中,我不得不单独查询它们。这些查询位于表格单元格本身中。这会导致图像在滚动时跳跃。我知道这是因为细胞出队的方式。有没有更好的方法来查询或关联来自两个解析查询的数据?

var usernameArray = [String]()
var detailArray = [String]()
var uuidArray = [String]()
var postArray = [PFFile]()
var followArray = [String]()
var page: Int = 10
var image: UIImage!
var follow = PFObject(className: "Follow")

func loadFollowers(){
    let followerQuery = PFQuery(className: "Follow")
    followerQuery.whereKey("follower", equalTo: (PFUser.current()?.username!)! as String)
    followerQuery.whereKey("blocker", notEqualTo: (PFUser.current()?.username!)! as String)
    followerQuery.findObjectsInBackground { (objects: [PFObject]?, error: Error?) in
        if error == nil{
            self.followArray.removeAll(keepingCapacity: false)
            for object in objects!{
                self.followArray.append(object.object(forKey: "following") as! String)
                self.followArray.insert((PFUser.current()?.username!)! as String, at: 0)
            }
            let dataQuery = PFQuery(className: "Posts")
            dataQuery.whereKey("user", containedIn: self.followArray)
            dataQuery.limit = self.page
            dataQuery.addDescendingOrder("_created_at")
            dataQuery.findObjectsInBackground(block: { (objects: [PFObject]?, error: Error?) in
                if error == nil{
                    self.usernameArray.removeAll(keepingCapacity: false)
                    self.detailArray.removeAll(keepingCapacity: false)
                    self.postArray.removeAll(keepingCapacity: false)
                    self.uuidArray.removeAll(keepingCapacity: false)
                    for object in objects!{
                        self.usernameArray.append(object.object(forKey: "user") as! String)
                        self.detailArray.append(object.object(forKey: "title") as! String)
                        self.postArray.append(object.object(forKey: "picture") as! PFFile)
                        self.uuidArray.append(object.object(forKey: "uuid") as! String)
                        self.tableView.reloadData()
                    }
                }
            })
        }
    }
}

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

cell.userName.text = usernameArray[indexPath.row]
cell.details.text = detailArray[indexPath.row]
cell.uuid.text = uuidArray[indexPath.row]

let query = PFUser.query()
query?.whereKey("username", equalTo:cell.userName.text!)
query?.findObjectsInBackground(){(objects: [PFObject]?, error: Error?) -> Void in
    if !(error != nil){
        for object in (objects as [PFObject]?)!{
            cell.displayName.text = object.object(forKey: "display") as? String
            if let userPicture = object.object(forKey: "avi") as? PFFile {
                userPicture.getDataInBackground(block: { (imageData: Data?, error: Error?) in
                    if (error == nil) {
                        let image = UIImage(data:imageData!)
                        cell.avi.image = image
                    }
                })
            }
        }
    }
}

aviArray[indexPath.row].getDataInBackground { (data: Data?, error: Error?) in
    if error == nil{
        cell.avi.image = UIImage(data: data!)
    }
}

postArray[indexPath.row].getDataInBackground { (data: Data?, error: Error?) in
    if error == nil{
        cell.post.image = UIImage(data: data!)
    }
}
return cell
}

提前感谢您的帮助。我对所有建议持开放态度,因为我对此不知所措。我不是专家,所以可能有更好的方法来做到这一点。

【问题讨论】:

    标签: ios arrays swift parse-platform


    【解决方案1】:

    获取图片的实际网址,并将图片设置为SDWebImage。 不再需要重新发明轮子。它将解决这个问题并降低代码的复杂性。

    【讨论】:

      【解决方案2】:

      听着,老兄,你应该在存储 _User 对象的 Follow 表中创建一个指针。在“cellForRowAt indexPath”中运行这样的 PFQuery 是个坏消息。您应该尽一切努力在 Parse 上构建后端数据,以便以这样一种方式相互关联,您可以像在原始查询中一样提取所有数据。但是,在“cellForRowAt indexPath”中使用从服务器中提取的“字符串”之类的东西运行小查询是安全的,图像不多,但是,可以在“cellForRowAt indexPath”内的背景中加载图像,但运行完整像这样查询图像不是一个好主意。我的建议是使用 PFImageView 并将您的 Follow 表连接到后端的 _User 表,这是可能的,这是做事的正确方法。此外,您应该考虑在拉入所有图像时将它们插入到一个数组中,您在那里所做的是每次更新表格视图时都在每个单元格上运行一个查询,这太可怕了。

      【讨论】:

        猜你喜欢
        • 2016-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-16
        • 1970-01-01
        • 2015-03-11
        • 2016-06-29
        相关资源
        最近更新 更多