我有以下结构:
我的用户表有一个名为experienceArray
的字段,它只是指向另一个名为experience
的表的指针数组。每个experience
对象都有一个指向另一个表Sport
的指针。 Sport
只是一个包含Title(String)的简单表。我试图在tableview中显示每个对象的标题。不幸的是,我在tableview委托中遇到异常,我将标题值分配给我的tableview单元格标签。
var object : PFObject = self.chosenSports[indexPath.row]["sport"] as! PFObject
以下是它的内容:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Key "title_en" has no data. Call fetchIfNeeded before getting its value.'
这条消息对我来说绝对有意义 - 它不会获得最内在的子对象,只有它们的objectIds。
这就是我的所作所为:
var query = PFUser.query()
query!.includeKey("experienceArray")
query!.includeKey("experienceArray.Sport")
query!.includeKey("experienceArray.Sport.title_en")
query!.whereKey("objectId", equalTo: PFUser.currentUser()!.objectId!)
query!.findObjectsInBackgroundWithBlock { (result: [AnyObject]?, error:NSError?) -> Void in
println("sports result: \(result)")
var res = result as! NSArray
var user = res[0]
self.chosenSports = user["experienceArray"] as! NSMutableArray
self.sportsTableView.reloadData()
}
如何更改代码以接收PFUser对象及其所有子代中包含的所有信息?
答案 0 :(得分:1)
你可以尝试一下,告诉我它是否有效:
PFUser.currentUser().fetchIfNeeded { user, error in
if error == nil && user != nil {
if let sports = user["experienceArray"] as? [PFObject] {
let query = PFQuery(className: "Sport") // Change to correct name.
query.whereKey("objectId", containedIn: sports.map { $0.objectId })
query.findObjectsInBackgroundWithBlock { (results, error) -> Void in
// TODO: Use results
}
}
}
}
当然,因为我不知道你是如何将内容保存到iVars中的,所以我在块中包含了代码,但你可以简单地将其分配给ivar。这应该有用。
编辑:更改了代码以仅发出2个请求。另请注意,代码不能处理错误,但这应该很容易。
答案 1 :(得分:0)
我决定用云代码获取所有孩子,然后从App调用云功能。这非常简单,结果证明是最好的解决方案,因为现在每个系统(iOS和Android)上的代码更少