解析错误: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!)
现在一切如我所愿。如果您对代码有任何建议,透彻的解释或改进,请随时修改和解释它。
谢谢
我被那个问题困住了。我已经阅读了 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!)
现在一切如我所愿。如果您对代码有任何建议,透彻的解释或改进,请随时修改和解释它。
谢谢