对我关注的用户进行Swift Parse查询

时间:2018-02-20 07:26:45

标签: swift xcode parse-platform tableview

我目前有一个查询,它返回我在服务器上拥有的所有用户的表格,如果我按照他们的名字,则会在其名称旁边显示一个复选标记。这是代码:

//REFRESHER
func refresh() {

    self.usernames.removeAll()
    self.userIDs.removeAll()
    self.isFollowing.removeAll()


    let query = PFUser.query()

    query?.findObjectsInBackground(block: { (objects, error) in

        if error != nil {
            print(error)

        } else if let users = objects {

            //self.usernames.removeAll()
            //self.userIDs.removeAll()
            //self.isFollowing.removeAll()

            for object in users {

                if let user = object as? PFUser {

                    if user.objectId != PFUser.current()?.objectId {

                        self.usernames.append(user.username!)
                        self.userIDs.append(user.objectId!)

                        let query = PFQuery(className: "Followers")

                        query.whereKey("follower", equalTo: PFUser.current()?.objectId)
                        query.whereKey("following", equalTo: user.objectId)

                        query.findObjectsInBackground(block: { (objects, error) in

                            if let objects = objects {

                                if objects.count > 0 {

                                    self.isFollowing[user.objectId!] = true

                                } else {

                                    self.isFollowing[user.objectId!] = false

                                }

                                if self.isFollowing.count == self.usernames.count {

                                    self.tableview.reloadData()

                                    self.refresher.endRefreshing()

                                }

                            }

                        })


                    }

                }

            }
            //self.refresher.endRefreshing()

        }


    })

}

我试图返回一张只包含我关注的用户的表格,但是我似乎无法让它工作,因为我的追随者类不属于PFUser类,因此它就是这样难以在Follower的课程中附加用户的用户名和用户ID。

我的关注者类有四列,关注者和跟随者,后面是每个用户的相应用户ID,然后是followerUsername和followingUsername,它们是各个用户的用户名。任何有关这方面的帮助将非常感激。谢谢!

更新:我现在正在使用指针在Parse中引用followerfollowing,以及我如何尝试向用户查询我'我跟着。这个实现是不行的,所以如果有人能指出我正确的方向,我非常感激!

     func refresh() {

    self.usernames.removeAll()
    self.userIDs.removeAll()
    self.isFollowing.removeAll()


           let query = PFQuery(className: "Followers")

           query.includeKey("following")

           query.whereKey("follower", equalTo: PFUser.current()?.objectId)


           query.findObjectsInBackground(block: { (objects, error) in

                            if error != nil {
                                print(error)

                            } else if let following = objects {

                                for object in following {

                                    if let usersFollowing = object as? PFObject {


           self.usernames.append(usersFollowing["followingUsername"] as! String)
           self.userIDs.append(usersFollowing["following"] as! String)


                            if let objects = objects {

                                if objects.count > 0 {


          self.isFollowing[usersFollowing["following"] as! String] = true

                                } else {

          self.isFollowing[usersFollowing["following"] as! String] = false

                                }

          if self.isFollowing.count == self.usernames.count {

                                    self.tableview.reloadData()

                                    self.refresher.endRefreshing()

                                }
                                            }
                                        }

                                }
                            }
    })
}

这是我的2个表格

userPost Table

Follower Table

1 个答案:

答案 0 :(得分:1)

使用嵌套查询和表重新加载,你所拥有的是非常低效的......一旦你获得了大量的用户,你就会执行太多的查询并且很难刷新该表。

您想要一个只包含当前用户所关注的所有用户的表吗?你的追随者表应该使用指针而不是对象id,然后你可以在查询上使用includeKeys方法来获取following对象的Followers字段,并查找所有对象follower等于当前用户。

使用ID,您可以使用Followers查询来执行matchesKeyInQuery方法,其中follower等于当前用户的ID,而User查询具有matchesKeyInQuery,其中键是objectId,queryKey是跟随,查询是追随者查询。但指针是连接表的正确方法,而不是存储ID。

您还可以查看“关系”,这可能非常适合跟踪您关注的用户。