swift解析查询限制

时间:2016-07-08 09:00:16

标签: swift parse-platform limit

有关于使用swift解析查询.limit的问题 使用以下设置和限制从解析中提取对象

func getUsernames()
    query.limit = self.limit
    query.findObjectsInBackgroundWithBlock //display on TableView 
    self.usernamesArray.append(someuser)
    self.tableView.reloadData()
}

然后在tableView:willDisplayCell

  if indexPath.row == self.usernamesArray.count - 1 {

                    self.limit += 5
                    self.getUsernames()
   }

并在viewDidAppear

    if self.usernames.count == 0 {

        self.limit = self.limit + 10
        self.getUsernames()

    }

这很好。每当我的桌子滚过第二个最后一个Cell时,另一个5就准备好了,这就是我所期待的! 问题是指如果usernamesArray.count的总值为50,当最后一个单元格(第50个单元格/计数)到达/滚动tableView时:willDisplayCell将继续被调用并且self.limit会不断增加55 ,60,65等......当它到达阵列中的最后一个单元格或最后一个数据时,它不会停止。它继续使用LTE数据和查询。限制数量增加5乘5(当没有数组值可用时) 我这样做对吗?或者我应该尝试不同的方法? 任何swift大师都将不胜感激!感谢

2 个答案:

答案 0 :(得分:0)

不,你做得不对。首先,只需增加限制并查询您总是获得已有数据的另一个副本,也许还有一些额外的项目。您应该更改每个新查询的偏移量(skip),而不是限制。

您还需要检查响应以查看返回的项目数。如果返回的项目数小于请求限制,那么您知道自己位于数据的末尾,并且不应再发出任何请求。设置一个标志,以便在滚动时知道没有其他任何东西可以加载。

答案 1 :(得分:0)

我发现创建一个处理所有这些信息的resultSet类更容易。

class ParseResultSet: NSObject {

    var limit = 20
    var skip = 0
    var total = 0
    var limitReached = false

    var orderByAscendingKey: String?
    var orderByDescendingKey: String?

    var searchActive: Bool?

    func increaseSkipByLimit() {
        skip += limit
    }

    func increaseTotal(byNumber: Int) {
            total += byNumber
            if byNumber == 0 {
                self.limitHasBeenReached()
                skip = total
            }
            else {
                self.increaseSkipByLimit()
            }
    }

    func limitHasBeenReached() {
        limitReached = true
    }

}

然后我使用一种方法,在完成块中从Parse获取对象。我检查是否达到了限制,如果没有达到

,则增加总数
func getObjects(classname: String, include: [String], completion: @escaping (_ result: [PFObject]) -> Void) {

    if self.resultSet.limitReached == false || self.resultSet.searchActive == true {
        fetchObjectsFromClass(parseClass: classname, include: include, completion: { [weak self] (objects) in
            self?.resultSet.increaseTotal(byNumber: objects.count)
            completion(objects)
        })
    }
    else {
        print("LIMIT REACHED")
    }
}

在我的例子中,fetchObjectsFromClass是一个全局函数,其中生成查询并返回一个PFObject数组。

希望这能让您了解自己需要做什么