2016-07-08 85 views
0

使用下面的设置和限制从parse迅速解析查询限制

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

拉对象,然后在的tableView有任何关于与SWIFT 解析query.limit问题: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() 

    } 

能正常工作。每当我的桌子滚动通过第二个细胞另一个5准备好这就是我期望的耶! 问题是否如果usernamesArray.count的总数值为50,并且最后一个单元格(第50个单元格/计数)已达到/滚动tableView:willDisplayCell会继续调用,并且self.limit将保持增加55,60和65等等......当它到达LAST单元或数组中的最后一个数据时,它不会停止。它继续使用LTE数据和query.limit数字增加5乘5(当没有更多数组值可用时) 我正在做这个对吗?或者我应该尝试不同的方法? 任何迅捷大师将不胜感激!谢谢

回答

0

不,你做得不对。首先,通过增加限制和查询,您总是可以获得已有数据的另一个副本,并且可能还有其他一些项目。您应该更改每个新查询的偏移量(skip),而不是限制。

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

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就是生成的查询和返回PFObjects数组的全局函数。

希望这可以让你知道你需要做什么