我使用parse.com作为iOS Swift应用的后端。
我有帖子&用户。用户可以喜欢帖子。
当我收到帖子列表时,我想看看PFUser.Currentuser()是否喜欢每个帖子。
在我目前的数据模型中,我在帖子上使用了一个关系。
let post = PFObject(withoutDataWithClassName: "Post", objectId: postId)
let relation = post.relationForKey("likers")
relation.addObject(PFUser.currentUser()!)
post.saveInBackground()
当我查询帖子时,我将每个帖子放入PostView对象。
let query = PFQuery(className: "Post")
query.findObjectsInBackgroundWithBlock{
(objects : [AnyObject]?, error : NSError?) -> Void in
if error == nil {
if let objects = objects as? [PFObject] {
for (index, object) in enumerate(objects) {
//convert PFObject into Post
let post = PostView(postQuery: object)
}
}
我希望在PostView中有一个布尔值,如果当前用户喜欢这个帖子,那就是真的。
class PostView {
var id = ""
var description = ""
var isPostLikedByCurrentUser : Bool?
init(postQuery : PFObject){
self.id = postQuery.objectId!
self.description = postQuery["description"] as! String
}
我根本不知道在何处或如何获取关系的内容。它在查询中吗?或者我应该在PostView中这样做,如果是这样的话?
我在PostView中试过这个
let relation = postQuery.relationForKey("likers")
let debug = relation.query()?.findObjectsInBackground()
关系有效,但我没有将任何数据输出到调试中。
非常感谢!
更新
这可行,但会进行大量查询...如何将其缩减为一个查询?我很乐意改变我的数据模型。
class PostView {
var id = ""
var description = ""
var isPostLikedByCurrentUser : Bool?
init(postQuery : PFObject){
self.id = postQuery.objectId!
self.description = postQuery["description"] as! String
let relation = postQuery.relationForKey("likers")
let query = relation.query()
query?.findObjectsInBackgroundWithBlock{
(objects : [AnyObject]?, error : NSError?) -> Void in
if error == nil {
if let objects = objects as? [PFObject] {
for (index, object) in enumerate(objects) {
if (object["email"]?.isEqual(PFUser.currentUser()?.email) != nil)
{
self.isPostLikedByCurrentUser = true
}
}
}
}
}
}