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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对我关注的用户进行Swift Parse查询相关的知识,希望对你有一定的参考价值。

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

//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()

        }


    })

}

我正在尝试返回一个只包含我跟随的用户的表,但是我似乎无法让它工作,因为我的Followers类不在PFUser类中,因此很难在用户名中添加用户名和用户ID。追随者的课程。

My Followers类有四列,跟随者和后面的列,每个用户的相应用户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

答案

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

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

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

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

以上是关于对我关注的用户进行Swift Parse查询的主要内容,如果未能解决你的问题,请参考以下文章

从最新到最旧对我的提要中的帖子进行排序(使用 Swift 和 Parse)

Swift - 根据数组值从 Parse 表中加载

使用 Parse 和 Swift 的一个键上的两个查询约束

Swift&Parse:查询结果,其中列类等于用户类中的列

iOS 如何优化数据库 Parse swift 4 的查询

在 Swift Parse SDK 中使用 Pointer<_User> 进行查询