从Parse类查询

时间:2016-03-07 10:59:28

标签: ios swift parse-platform

我正在尝试从_User类中查询用户,这是我成功管理的。但是,我现在要做的就是遇到一些困难,是查询另一个类,帖子,并下载与第一个查询下载的用户匹配的图像?!

所以我只是试图将来自Posts类的图像分配给来自_User类的正确用户......这听起来很简单,但它让我发疯了!

这是我的查询代码,我知道这可能不是最好的方式,但我对Swift来说是新手!但是,如果您有任何建议或建议,我愿意尝试任何提示或建议!

let userQuery = PFQuery(className: "_User")
userQuery.addDescendingOrder("createdAt")
userQuery.findObjectsInBackgroundWithBlock ({
    (objects:[PFObject]?, error:NSError?) -> Void in
    if error == nil {
        self.profilePicArray.removeAll(keepCapacity: false)
        self.usernameArray.removeAll(keepCapacity: false)
        self.fullnameArray.removeAll(keepCapacity: false)
        self.uuidArray.removeAll(keepCapacity: false)

        for an object in objects! {
            self.profilePicArray.append(object.valueForKey("profilePicture") as! PFFile)
            self.usernameArray.append(object.valueForKey("username") as! String)
            self.fullnameArray.append(object.valueForKey("firstname") as! String)
            self.uuidArray.append(object.valueForKey("uuid") as! String)
        }

        let imageQuery = PFQuery(className: "Posts")
        imageQuery.whereKey("username", containedIn: self.usernameArray)
        imageQuery.findObjectsInBackgroundWithBlock({ (objects:[PFObject]?, error:NSError?) -> Void in
            if error == nil {

                self.lastPicArray.removeAll(keepCapacity: false)

                for an object in objects! {
                    self.lastPicArray.append(object.valueForKey("image") as! PFFile)
                }
                self.collectionView.reloadData()
            } else {
                print(error!.localizedDescription)
            }
        })
    } else {
        print(error!.localizedDescription)
    }
})

我目前得到的结果是:所有用户的下载以及所有帖子,但图片只是随机分配给每个用户,或者每个用户都会显示所有帖子!

提前致谢。

新查询

 func uu() {

    let query = PFQuery(className: "_User")
    query.addDescendingOrder("createdAt")
    query.includeKey("latestImage")
    query.whereKey("username", notEqualTo: PFUser.currentUser()!.username!)
    query.findObjectsInBackgroundWithBlock { (object:[PFObject]?, error:NSError?) -> Void in

        if error == nil {

            for object in object! {


                if (object.objectForKey("latestImage") != nil)
                {

                    self.lastPicArray.append(object.objectForKey("latestImage")!.valueForKey("image") as! PFFile)
                    self.profilePicArray.append(object.valueForKey("profilePicture") as! PFFile)
                    self.fullnameArray.append(object.valueForKey("firstname") as! String)
                    self.usernameArr.append(object.valueForKey("username") as! String)

                }

                }

            self.collectionView.reloadData()


            print(self.usernameArr)
            print(self.lastPicArray)
        }
    }

}

1 个答案:

答案 0 :(得分:0)

通过使用Parse Queries的includeKey函数,您应该只使用一个查询来执行此操作

Parse Queries

进行第二次查询,并添加如下内容:

let imageQuery = PFQuery(className: "Posts")
imageQuery.whereKey("username", containedIn: self.usernameArray)
imageQuery.includeKey("fieldNameOfUserPointer")

只需将'fieldNameOfUserPointer'更改为引用Posts实体中的_User对象的字段名称。