Ios Parse.com查询1000多个对象

Ios Parse.com查询1000多个对象,ios,xcode,swift,parse-platform,xcode6,Ios,Xcode,Swift,Parse Platform,Xcode6,我把parse数据库的名称作为时间表,我想从列“intrange”中获取数据,但是我有很多数据,大约5000条记录。我知道我们可以得到的最大查询对象是1000个,但是如何获得超过1000个记录呢? 我写的代码只是对1000的查询 var query = PFQuery(className: "Timetable") var limit:NSInteger = 1000 var skip:NSInteger = 0 query.limit = lim

我把parse数据库的名称作为时间表,我想从列“intrange”中获取数据,但是我有很多数据,大约5000条记录。我知道我们可以得到的最大查询对象是1000个,但是如何获得超过1000个记录呢? 我写的代码只是对1000的查询

var query = PFQuery(className: "Timetable")
        var limit:NSInteger = 1000
        var skip:NSInteger = 0
        query.limit = limit
        query.skip = skip
        query.orderByAscending("Intake")
        query.findObjectsInBackgroundWithBlock
        {
            (objects:[AnyObject]?, error:NSError?) -> Void in
                if error == nil
                {
                    query.findObjectsInBackgroundWithBlock
                        {
                            (objects:[AnyObject]?, error:NSError?) -> Void in
                            if error == nil
                            {
                                for object in objects! as [AnyObject]
                                {
                                    var intakeCode = object["Intake"] as? String
                                    if !self.pickerString.containsObject(object["Intake"] as! String) {
                                        self.pickerString.addObject(object["Intake"] as! String)
                                    }
                                }
                                self.pvIntakeCode.reloadAllComponents()
                            }
                            else
                            {
                                NSLog("Error: %@ %@", error!, error!.userInfo!)
                            }
                    }
                }
                else
                {
                    NSLog("Error: %@ %@", error!, error!.userInfo!)
                }

我知道stackoverflow存在这个问题,但我真的不明白它说了什么。(另一个问题来自这里:)。但是我不明白,很抱歉再次问这个问题。

1000条记录的限制是有原因的。您永远不需要在一个查询中检索那么多对象,因为这很可能会阻塞您的应用程序并导致性能低下

我可以看到两种情况,为什么要检索所有记录:

  • 您希望向用户显示所有记录
  • 您希望对所有记录执行操作
  • 在场景1中,您真正想要的是翻阅结果。由于您一次只能在屏幕上显示几条记录,因此您应该查询100条记录,然后在用户滚动并接近前100条记录的末尾时触发对下100条记录的新查询,等等,直到用户滚动完所有记录(这将是一个非常耐心的用户…)。 您可以通过查询限制和跳过来解决此问题:

    query.setLimit(100)
    query.setSkip(skip)
    
    第一次运行时,skip为0。对于每一次连续跑步,您将“跳过”增加100

    在场景2中,您不希望在客户端上执行此操作。输入后台作业!

    @Dato'Mohammad Nurdin我尝试了您编辑的最新代码,它仍然是相同的输出,只从表中获取前1000条记录。我已经为query.limit和query.skip工作过可能的重复项,但是当我跳过时,例如,我首先跳过的值是0,因此在接下来的步骤中,我将根据我的限制进行跳过,所以我将执行skip+=limit,但当我执行此操作时,它只显示1000到1999年之后的结果,而不是0到9999,那么我猜您没有使用skip=0运行第一个查询。用代码更新您的问题以供我们查看。LP,我有一个iOS应用程序,我可能有一个大于1000的查询。从技术上讲,我不需要所有的对象,但我需要一个随机集,这样它们就不能仅仅是前n个对象,而是实际上是随机的。我想查询所有对象(如果大于1000,则运行多个查询),然后按照我的意愿操作它们。嗨@月球漫步者是对的。我认为一次拿太多东西是很糟糕的做法。例如,你有1000000个用户是什么?你真的想一次把它们都拿来吗。你应该使用抽样。例如,如果您需要从1000000个总体中提取1000个随机样本,一个示例是将数字限制为X,等于100,并将“跳过”设置为随机数Y,例如20,提取数据,从数据中提取随机分数Z,然后继续,直到获得所需的1000个随机样本。