2016-07-08 95 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數組的全局函數。

希望這可以讓你知道你需要做什麼