【问题标题】:swift parse query not returning objects in ascending order快速解析查询不按升序返回对象
【发布时间】:2016-03-31 14:02:47
【问题描述】:

我的查询旨在获取一定数量的用户创建的对象。以下是我的代码:

var dates = [NSDate]()
var messages = [String]()

        let getUsersQuery = PFQuery(className: "followings")

        getUsersQuery.whereKey("follower", equalTo: PFUser.currentUser()!.objectId!)

        getFollowedUsersQuery.findObjectsInBackgroundWithBlock { (objects, error) -> Void in

            if let objects = objects {

                for object in objects {

                    let followedUser = object["followedUser"] as! String

                    let getPostsQuery = PFQuery(className: "posts")

                    getPostsQuery.whereKey("userId", equalTo: followedUser)
                    getPostsQuery.orderByDescending("updatedAt")

                    getPostsQuery.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in

                        if let objects = objects {

                            for post in objects {

                                self.dates.append(post.createdAt as NSDate!)
                               self.messages.append(post["message"] as! String)
                        }

                        print(self.dates)

                        self.myTableView.reloadData()
                    })
                }
            }
        }
    })

当我在日志中打印日期时会出现以下情况:

但是,我的 tableview 中的内容不是按升序排列的。事实上,最近创建的帖子位于表格视图的底部。我注意到的一件事是特定用户的帖子似乎一起显示。因此,无论其他用户创建了最新帖子,一个用户的所有帖子都会出现在 tableview 的顶部。知道出了什么问题吗?谢谢!

【问题讨论】:

  • 看看你的代码在做什么。获得关注的用户。对于第一个用户。获取帖子。将帖子添加到数组。对于第二个用户。获取帖子。将帖子添加到数组。对于第三个用户。等等......当然它会做你所说的它正在做的事情。此外,您将在此处确定设备的网络。您在可以推送到服务器的设备上做了大量工作。

标签: swift parse-platform tableview


【解决方案1】:

您需要的是嵌套查询。您要获取的数组是一个帖子。所以你的查询应该在 post 表上。 (此外,您的表格应称为post 而不是posts。表格名称应始终为单数。每个帖子都称为post 而不是posts

let postsQuery = PFQuery(className: "post")
postsQuery.orderByDescending("updatedAt")

let usersQuery = PFQuery(className: "following")
usersQuery.whereKey("follower", equalTo:PFUser.currentUser()!.objectId!)

// this might need to change depending on what the followed user is called in the `followings` table.
postsQuery.whereKey("userId", matchesKey:"followed", inQuery:usersQuery)

getPostsQuery.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
    if let objects = objects {

    for post in objects {
        self.dates.append(post.createdAt as NSDate!)
        self.messages.append(post["message"] as! String)
    }

    print(self.dates)

    self.myTableView.reloadData()
})

此外,您将日期和消息保存在单独的数组中。创建一个结构体或具有日期和字符串的结构体,并拥有一个 Post 对象数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多