Reputation: 3221
I've been trying to chain to no success. After an initial query, I attempt to count the results. Then, I check to see if the results are equal to the limit of the query. If they are the same, I create a new query and repeat.
All I'm getting is the results of the first query, however.
Code is here:
var allObjects = [PFObject]()
var skip = 0
var limit = 10
var downloadCards = PFQuery(className: "Checklist")
downloadCards.whereKey("createdBy", equalTo:PFUser.currentUser()!)
downloadCards.includeKey("card")
downloadCards.orderByAscending("IndexNumber")
downloadCards.limit = limit
downloadCards.skip = skip
downloadCards.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
if let objects = objects as? [PFObject] {
for object in objects {
if let card = object["card"] as? PFObject {
allObjects.append(card)
}
}
}
//1000
if objects!.count == limit {
//Query again until results aren't equal to limit
skip = skip + limit
var downloadCards2 = PFQuery(className: "Checklist")
downloadCards2.whereKey("createdBy", equalTo:PFUser.currentUser()!)
downloadCards2.includeKey("card")
downloadCards2.orderByAscending("IndexNumber")
downloadCards2.limit = limit
downloadCards2.skip = skip
downloadCards2.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
if let objects = objects as? [PFObject] {
for object in objects {
if let card = object["card"] as? PFObject {
allObjects.append(card)
}
}
}
Upvotes: 0
Views: 566
Reputation: 173
You can set the "skip" variable to 1,000, 2,000, etc. as you get more results up to 10,000 skips. After that, you can follow the directions here: https://parse.com/questions/paging-through-more-than-10000-results
Edit:
Apologies - I might have misread your question.
1) You should rename the variables in your second loop to objects2, error2, card2, etc. similar to downloadCards2.
2) Alternatively, to make your code scalable and DRY, I would make allObjects, skip, and limit properties and simply re-run the same query again.
func runQuery() {
var downloadCards = PFQuery(className: "Checklist")
downloadCards.whereKey("createdBy", equalTo:PFUser.currentUser()!)
downloadCards.includeKey("card")
downloadCards.orderByAscending("IndexNumber")
downloadCards.limit = limit
downloadCards.skip = skip
downloadCards.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
if let objects = objects as? [PFObject] {
for object in objects {
if let card = object["card"] as? PFObject {
allObjects.append(card)
}
}
}
if objects!.count == limit {
skip = skip + limit
self.runQuery()
}
}
}
}
Upvotes: 3