解析错误:PFObject 没有名为 'createdAt' 的成员

Error with Parse: PFObject does not have a member named 'createdAt'

我被那个问题困住了。我已经阅读了 Parse 文档 (https://parse.com/docs/ios/guide#queries-query-constraints),但它对我帮助不大。

错误

当我尝试从 PFObject 获取 "createdAt" 或 "updatedAt" 时,出现以下错误:

['PFObject'] does not have a member named 'createdAt'

代码

这里是 (缩写) 函数:

func loadCheckInData() {

    var query = PFQuery(className: "CheckIn")
    query.orderByDescending("createdAt")
    query.selectKeys(["firstName","lastName","updatedAt","createdAt"])

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

        if error == nil {

            println(objects)
            // Do something
            if let object = objects as? [PFObject] {
                println("\(object.createdAt)")                  <---- Error here
                self.CheckedPatients = Array(object.generate())
            }
        } else {
            // Log details of the failure
            println("Error: \(error!) \(error!.userInfo!)")
        } 
    }) 
}

然后我使用以下代码检索 "firstName"、"lastName"(并尝试检索 "createdAt")在我的 "CheckIn" Parse 的 class 中

func collectionView(cellView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    // Add parse data
    if let value = CheckedPatients[indexPath.row]["lastName"] as? String {
        cell.cellLabelTwo.text = value
    }
    if let value = CheckedPatients[indexPath.row]["firstName"] as? String {
        cell.cellLabel.text = value
    }
    if let value = CheckedPatients[indexPath.row]["createdAt"] as? String {
        cell.cellDay.text = value
    }
    return cell
}

我调用函数

override func viewDidAppear(animated: Bool) {
    loadCheckInData()
}

事实上,我尝试了不同的方法来获取 "createdAt" 值,但我无法让它工作。有没有人有想法(如果可能的话,还有一个快速的解释)它可能很好。 谢谢!

仅仅是因为updatedAt/createdAt是所有PFObjects上的属性,不需要使用key来检索它,只是把它当作属性。

感谢@SanitLee 的回答,我知道了如何获得 属性。我 post 我的代码和解决方案,以便每个人都能看到它。

解决方案

在名为 loadCheckInData() 的函数中,我将 for object in objects { 添加到 findObjectsInBackgroundWithBlock 方法中。见下文:

func loadCheckInData() {

    var query = PFQuery(className: "CheckIn")
    query.orderByDescending("createdAt")
    query.findObjectsInBackgroundWithBlock({
        (objects: [AnyObject]?, error: NSError?) -> Void in
        if error == nil {

            // Do something
            if let objects = objects as? [PFObject] {
                for object in objects {                 // <---  Added
                    // data stored in the var named "CheckedPatient"
                    self.CheckedPatients = Array(objects.generate())
                }
            }
        } else {
            // ...
        }
    })
}

然后为了在 cellForItemAtIndexPath 函数中检索 createdAt 属性,我更改了:

if let value = CheckedPatients[indexPath.row]["createdAt"] as? String {
    cell.cellDay.text = value
}

进入:

    var DateVar : PFObject = CheckedPatients[indexPath.row]
    var dateFormatter:NSDateFormatter = NSDateFormatter()      // Formating
    dateFormatter.dateFormat = "EEEE dd MMM HH:mm"     
    cell.cellDay.text = dateFormatter.stringFromDate(DateVar.createdAt!)

现在一切如我所愿。如果您对代码有任何建议,透彻的解释或改进,请随时修改和解释它。

谢谢