我有这个问题:
var query = PFQuery(className: "CardSet")
query.whereKey("user", equalTo: PFUser.currentUser())
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if (error == nil) {
// found
}else{
println(error.userInfo)
}
}
结果如下:
<CardSet: 0x7c892120, objectId: 2yty7cpnyF, localId: (null)> {
ACL = "<PFACL: 0x7be65450>";
lesson = "<Lesson: 0x7beaabd0, objectId: JV7trFTx5Z>";
name = "I am your CardSet";
public = 1;
user = "<PFUser: 0x7be834a0, objectId: baz8ObNsmM>";
}
Class&#34; CardSet&#34;有一个指针&#34;课程&#34;上课&#34;课程&#34;。 如何在查询结果中使用Lesson.name?或者我需要第二次查询?那会很糟糕,因为要解析的请求数量很多......?有没有更好的方法只在一个查询中获取所有指向的数据?
答案 0 :(得分:11)
您可以告诉Parse使用includeKey
方法获取相关对象:
var query = PFQuery(className: "CardSet")
query.whereKey("user", equalTo: PFUser.currentUser())
query.includeKey("lesson")
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) in
for cardset in objects {
var lesson = cardset["lesson"] as PFObject
var name = lesson["name"] as String
println("retrieved related lesson: \(post) with name: \(name)")
}
}
在文档的Relational Queries部分提到。
答案 1 :(得分:0)
你传递了一个对象数组,所以你必须从数组中获取CardSet:
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if (error == nil) {
for object in objects { //note: if objects is always of size 1, just use objects[0]
var cardset = object as CardSet //get the entry
var lesson = cardset.lesson
}
}else{
println(error.userInfo)
}
})
答案 2 :(得分:0)
首先必须使用includekey然后将数据保存为findobjectwithdatablock中的PFObject - &gt;如果数据是PFUser保存为PFUser,则保存为PFObject
示例:
var veriable = (PFUser)()
YourQueryFindObjectBlock {
self.veriable = result["pointerCol"] as PFUser // if pointer has user data
}