【问题标题】:Swift why when Retrieving data from Parse I have to press button twice to load data in tableviewSwift 为什么从 Parse 检索数据时我必须按两次按钮才能在 tableview 中加载数据
【发布时间】:2017-01-27 19:19:59
【问题描述】:

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

var Saveddata: [UIImage] = []

@IBAction func getAlbum(_ sender: AnyObject) {
    if (self.textEntercode.text == "")
    {
        let alert = UIAlertController(title: "No Entered value", message:   "Please enter value", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil));
        //event handler with closure

        present(alert, animated: true, completion: nil);
    }
    else {
        //-------------Get Data from Parse Server-------------------
        var photo = textEntercode.text
        let query = PFQuery(className: "Photostable10")

        query.whereKey("photo", equalTo: photo)
        //query.whereKey("Score", greaterThan: 1000)

        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!)
                            }
                        })
                    }
                }
            }
        })
        self.tableview.reloadData()
    } //else close
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

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

    cell.textLabel!.text = "Post"
    cell.imageView?.image = Saveddata[indexPath.row]
    return cell

}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.Saveddata.count
}

【问题讨论】:

    标签: swift uitableview pfquery


    【解决方案1】:

    您对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()
            }
        }
    })
    

    【讨论】:

    • 我很抱歉它工作了一次然后我必须按两次 UI 按钮我不知道为什么 - 或者可能是我点击了两次而没有注意到它
    • 使用调试器并单步调试代码。确认没有错误并确认您获得了预期的数据。
    • 我正在获取数据,并且数组是从第一次 CLick 填充的,但是它仅在第二次单击时才显示在 tableview 中
    猜你喜欢
    • 2021-01-29
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2022-01-22
    • 2021-12-30
    • 2022-11-03
    相关资源
    最近更新 更多