Swift 为什么从解析中检索数据时,我必须按两次按钮才能在tableview中加载数据

Swift 为什么从解析中检索数据时,我必须按两次按钮才能在tableview中加载数据,swift,uitableview,pfquery,Swift,Uitableview,Pfquery,下面是我从Parse server类检索图像并将其加载到tableview中的代码。 当我按GetAlbum UIbutton显示数据时,我必须按两次才能成功地在tableview中显示数据,我不知道原因是什么。请帮忙(注:我是swift新手) 您对self.tableView.reloadData()的调用位于错误的位置,并且是从错误的队列调用的。您需要在主队列上调用它,并且需要在更新数据模型后在查询完成处理程序中调用它 query.findObjectsInBackground(block:

下面是我从Parse server类检索图像并将其加载到tableview中的代码。 当我按GetAlbum UIbutton显示数据时,我必须按两次才能成功地在tableview中显示数据,我不知道原因是什么。请帮忙(注:我是swift新手)


您对
self.tableView.reloadData()
的调用位于错误的位置,并且是从错误的队列调用的。您需要在主队列上调用它,并且需要在更新数据模型后在查询完成处理程序中调用它

query.findObjectsInBackground(block: { (objects : [PFObject]?, error: Error?) -> Void in
    if error == nil {
        for object in objects! {
            if let userPicture = object.value(forKey: "photo") {
                let userPicture = object.value(forKey: "photo")! as! PFFile
                userPicture.getDataInBackground({ (imageData: Data?, error: Error?) -> Void in
                    let image = UIImage(data: imageData!)
                    if image != nil {
                        self.Saveddata.append(image!)
                    }
                })
            }
        }
        DispatchQueue.main.async {
            self.tableview.reloadData()
        }
    }
})

很抱歉,它工作了一次,然后我不得不按两次UIbutton我不知道为什么-或者可能是我在没有注意到iTunes的情况下单击了两次使用调试器并逐步完成代码。确认没有错误,并确认您正在获取所需的数据。我正在获取数据,数组从第一次单击开始填充,但仅从第二次单击开始在tableview中显示
query.findObjectsInBackground(block: { (objects : [PFObject]?, error: Error?) -> Void in
    if error == nil {
        for object in objects! {
            if let userPicture = object.value(forKey: "photo") {
                let userPicture = object.value(forKey: "photo")! as! PFFile
                userPicture.getDataInBackground({ (imageData: Data?, error: Error?) -> Void in
                    let image = UIImage(data: imageData!)
                    if image != nil {
                        self.Saveddata.append(image!)
                    }
                })
            }
        }
        DispatchQueue.main.async {
            self.tableview.reloadData()
        }
    }
})