有关于使用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大师都将不胜感激!感谢
答案 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数组。
希望这能让您了解自己需要做什么