TableViewCell 中的解析值未更新

Posted

技术标签:

【中文标题】TableViewCell 中的解析值未更新【英文标题】:Parse Values in TableViewCell not updating 【发布时间】:2017-07-19 17:36:40 【问题描述】:

非常感谢任何可以帮助我的人,非常感谢!

我正在构建一个约会应用程序,并尝试在解析查询后将我的匹配项加载到表中。预期的结果是表格视图包含匹配图像和匹配 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(代码有效)名称(代码无效)和年龄(代码无效)

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

这是我在“年龄”标签上用于非工作代码的内容,我认为错误是我试图使用“= 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】:

您正在循环中重新加载表格视图(很多),当 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
        

【讨论】:

这对我指出正确的方向很有帮助,我最终在一个不同的地方,但非常感谢你指出正确的方向。非常感谢您的回复! 当然,没问题。如果答案是正确的,您可以将其视为正确答案。否则,为未来的用户回答您自己的问题可能会很好。 我确实投票认为它是正确的,但系统说我的投票没有显示,因为我没有足够的声望点,呜呜呜…… 这与投票无关,而是为您的问题选择正确的答案(绿色 vink)。

以上是关于TableViewCell 中的解析值未更新的主要内容,如果未能解决你的问题,请参考以下文章

嵌套 Rails 表单中的动态值未更新

BindingBeans中的复合值未更新

单选按钮值未解析

重用 tableviewcell 中的约束和高度未更新

在swift 3中的tableview中更新tableviewcell中的特定行?

TableViewCell 中的 PickerView 可以工作但不能更新