TableViewCell中的解析值未更新

时间:2017-07-19 17:36:41

标签: ios swift parse-platform

非常感谢能够帮助我的任何人,非常感谢!

我正在构建一个约会应用程序,我试图在解析查询后将我的匹配加载到表中。预期的结果是表视图包含匹配图像和匹配ID。现在我的代码完全在下面工作。

import UIKit
import Parse


class MyListViewController: UIViewController, UITableViewDataSource, 
UITableViewDelegate {

var images = [UIImage]()
var userIds = [String]()

@IBOutlet weak var tView: UITableView!

@IBAction func toSwiperButton(_ sender: Any) {


    performSegue(withIdentifier: "ToSwiper", sender: self)
}

override func viewDidLoad() {
    super.viewDidLoad()

    let query = PFUser.query()

    query?.whereKey("objectId", containedIn: PFUser.current()?["accepted"] 
 as! [String])

    query?.findObjectsInBackground(block: { (objects, error) in

        if let users = objects {

            for object in users {

                if let user = object as? PFUser {

                    let imageFile = user["photo"] as! PFFile

                    imageFile.getDataInBackground(block: { (data, error) in

                        if let imageData = data {

                            self.images.append(UIImage(data: imageData)!)

                            self.userIds.append(user.objectId!)

                            self.tView.reloadData()


                        }

                    })
                }

            }

        }

    })
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


internal func tableView(_ tableView: UITableView, numberOfRowsInSection 
section: Int) -> Int {

return images.count
}

internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! PDPLIstViewTableViewCell

cell.Image.image = images[indexPath.row]

cell.id.text = userIds[indexPath.row]

return cell


}





}

当我尝试在“视图”和“年龄”的表视图中包含两个额外的标签时出现问题 - 我似乎无法在Parse的查询中找到正确的方法来调用它们以及工作照片查询。

我想要的结果是表格中的每个单元格都有一个图像(代码正在工作)Id(代码正在工作)名称(代码不工作)和年龄(代码不工作)

通过“不工作”我的意思是当我尝试从解析数据创建年龄变量时出现大量错误,因此我可以将其传递给数组,以便我的tableview可以显示旁边的文本图像。

以下是我在“年龄”标签上使用的非工作代码,我相信错误是我试图使用“= data”来拉取名称/年龄,我必须使用不同的术语?

import UIKit
import Parse


class MyListViewController: UIViewController, UITableViewDataSource, 
UITableViewDelegate {

var images = [UIImage]()
var userIds = [String]()
var name = [String]()
var age = [String]()

@IBOutlet weak var tView: UITableView!

@IBAction func toSwiperButton(_ sender: Any) {


    performSegue(withIdentifier: "ToSwiper", sender: self)
}

override func viewDidLoad() {
    super.viewDidLoad()

    let query = PFUser.query()

    query?.whereKey("objectId", containedIn: PFUser.current()?["accepted"] 
    as! [String])

    query?.findObjectsInBackground(block: { (objects, error) in


        if let users = objects {

            for object in users {

                if let user = object as? PFUser {

                    let ageFile = user["age"] as! PFFile

                    ageFile.getDataInBackground(block: { (data, error) in

                        if let ageData = data {

                           self.age.append(UILabel(data: ageData)!)
                        }

                    let imageFile = user["photo"] as! PFFile

                    imageFile.getDataInBackground(block: { (data, error) in

                        if let imageData = data {

                            self.images.append(UIImage(data: imageData)!)

                            self.userIds.append(user.objectId!)

                            self.age.append(String(data: ageFile))

                            self.tView.reloadData()


                        }

                    })
                }

            }

        }

    })
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


internal func tableView(_ tableView: UITableView, numberOfRowsInSection 
section: Int) -> Int {

    return images.count
}

internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: 
IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: 
indexPath) as! PDPLIstViewTableViewCell

    cell.image.image = images[indexPath.row]

    cell.id.text = userIds[indexPath.row]

    cell.name.text = name[indexPath.row]

    cell.age.text = age[indexPath.row]

    return cell


}





}

1 个答案:

答案 0 :(得分:0)

你正在循环中重新加载tableview(很多),当ageData完成时你也不会重新加载。查询完成后,尝试重新加载tableview一次。在:

internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: 
IndexPath) -> UITableViewCell {

    guard let ageFile = age[indexPath.row] as? PFFile else { return }

    ageFile.getDataInBackground(block: { (data, error) in

        if let ageData = data {

             cell.age.text = ageData
        }
}