【问题标题】:How to add PFObjects to a tableview in swift如何在 swift 中将 PFObjects 添加到 tableview
【发布时间】:2015-04-21 18:46:45
【问题描述】:

我正在构建一个签到应用程序,但无法在我的 tableview 中填充使用 Parse 存储的客人。尝试附加对象时出现错误。我也有一个从 Udemy 课程中遵循的用户登录名。在课程中,他展示了如何显示 PFUsers,但我无法使用 PFObjects 让它工作。任何帮助都会很好。

这是 PFUsers 的工作代码。

var users = [""]

override func viewDidLoad() {
    super.viewDidLoad()

    var query = PFUser.query()

    query!.findObjectsInBackgroundWithBlock({ (objects: [AnyObject]?, error: NSError?) -> Void in

        self.users.removeAll(keepCapacity: true)

        for object in objects! {

            var user:PFUser = object as! PFUser

            self.users.append(user.username!)

        }

        self.tableView.reloadData()

    })

}

这是带有 PFObjects 的非工作代码。

var users = [""]

override func viewDidLoad() {

    super.viewDidLoad()

    var query = PFQuery(className: "TestObject")

    query.findObjectsInBackgroundWithBlock({ (objects: [AnyObject]?, error: NSError?) -> Void in

        self.users.removeAll(keepCapacity: true)

        for object in objects! {

            var guest = object as! PFObject

            self.users.append(guest.foo!)
        }

    })
}

错误显示就行了

self.users.append(guest.foo!)

错误提示“'PFObject' 没有名为 'foo' 的成员”

【问题讨论】:

    标签: ios uitableview swift parse-platform


    【解决方案1】:

    您使用变量user 定义您的PFUser 对象,这将使第一个示例工作(您获得用户的name)第二个示例不起作用,因为您仍然将PFObject 定义为user但尝试访问未定义的guestname

    你可以选择第一个例子,也可以改变

    var user:PFObject = object as! PFObject
    

    var guest:PFObject = object as! PFObject
    

    无论哪种方式,这对您的代码都没有关系,它只是变量的名称。 此解释将修复您的“使用未解析的标识符‘guest’”
    但这不是您唯一的问题,
    第一个示例使用的 PFUser 对象是一种特殊的 PFObject,PFUser 类确实有一个.name,它指的是(显然)用户名。不是每个 PFObject 都有名字,所以你不能只访问 PFObject 的.name。 Parse 有一个出色的documentation about retrieving objects 我将首先访问此文档。如果您仍然不清楚,您可以针对您的新问题提出另一个具体问题。

    要从对象中检索数据,您需要使用[]

    让我们建议我们有一个名为 gameScore 的类,其中包含以下信息

    score: 1337, playerName: “Sean Plott”, cheatMode: false
    

    我们会这样做

    var gameScore = PFObject(className:"GameScore")
    gameScore["score"] = 1337
    gameScore["playerName"] = "Sean Plott"
    gameScore["cheatMode"] = false
    gameScore.saveInBackgroundWithBlock {
      (success: Bool, error: NSError?) -> Void in
      if (success) {
        // The object has been saved.
      } else {
        // There was a problem, check error.description
      }     
    }
    

    要检索您需要查询的对象(正如您在帖子中所做的那样) 您收到的数据可以按如下方式提取:

    let score = gameScore["score"] as Int
    let playerName = gameScore[“playerName"] as String
    let cheatMode = gameScore["cheatMode"] as Bool
    

    【讨论】:

    • 对象的创建方式是否重要?因为对于我在应用程序中创建的用户,但对于客人,我将所有客人的 csv 文件导入到解析中。
    • 无法将 PFObject 转换为 PFUser。您需要将 cvs 文件的数据转换为 PFUser。如果您为您在应用程序中创建的用户创建一个 PFUser,但为客人创建一个 PFObject,则您无法(正确且轻松地)在两者之间交换数据
    • 是的,我只想见客人。我无法从解析中获取检索对象。但我会继续努力。谢谢@milo526
    • 为了 SO 问题的一致性和质量,请您将此答案标记为回答您的问题并针对您的 PFObject 问题创建一个新问题
    • 但我的问题还是一样。如何将 PFObjects 放入 tableview?
    【解决方案2】:

    我想通了,我需要先将对象标签作为字符串获取,然后才能将其附加到数组中,然后将其添加到表格视图中。

    这是工作代码:

    var users = [""]
    
    override func viewDidLoad() {
    
        super.viewDidLoad()
    
        var query = PFQuery(className: "TestObject")
    
        query.findObjectsInBackgroundWithBlock({ (objects: [AnyObject]?, error: NSError?) -> Void in
    
            self.users.removeAll(keepCapacity: true)
    
            for object in objects! {
    
                var foo = object.objectForKey("foo") as? String
    
                self.users.append(foo!)
            }
            self.tableView.reloadData()
        })
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 2016-08-01
      • 2011-11-05
      • 2023-04-02
      • 2023-01-03
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 2020-04-07
      相关资源
      最近更新 更多