1

Here is my code for retrieving data from icloud. How do i limit the number of data it retrieves to 25? I saw this question answered before, but i'm not sure how to apply it to my code? can you help?

Here is where i saw the question answered before. Please tell me exactly how to add it to my code or just give an answer with it in the code.

CKQuery from private zone returns only first 100 CKRecords from in CloudKit

CloudKit Batch Fetches?

import UIKit
import CloudKit

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {

    @IBOutlet weak var collectionView: UICollectionView!

    var EventsArray:[String] = [String]()

    var container:CKContainer?
    var privateDatabase:CKDatabase?
    var publicDatabase:CKDatabase?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.container = CKContainer.defaultContainer()
        self.privateDatabase = self.container?.privateCloudDatabase
        self.publicDatabase = self.container?.publicCloudDatabase


        self.collectionView.dataSource = self
        self.collectionView.delegate = self

        self.LoadEvents()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func LoadEvents() {

            let predicate:NSPredicate = NSPredicate(value: true)
            let query:CKQuery = CKQuery(recordType: "Data", predicate: predicate)
            query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]

            if let database = self.publicDatabase {
                database.performQuery(query, inZoneWithID: nil, completionHandler: { (records:[AnyObject]!, error:NSError!) in

                    if error != nil {
                      self.alert("Error: \(error.localizedDescription)", Message: "Make sure iCloud is turned on and you are connected to the internet")
                      self.loading.hidden = true
                    }
                    else {
                        dispatch_async(dispatch_get_main_queue()) {

                            self.EventsArray.removeAll(keepCapacity: false)

                            for record in records {
                                let usernameRecord:CKRecord = record as CKRecord
                                if let event = usernameRecord.objectForKey("Events") as? String{
                                    self.EventsArray.insert(event, atIndex: 0)
                                }
                            }

                            //update data
                            self.collectionView.reloadData()
                            self.loading.hidden = true
                        }
                    }
                    })
                }}
Community
  • 1
  • 1
nachshon f
  • 3,540
  • 7
  • 35
  • 67

1 Answers1

1

Instead of performQuery you should use a CKQueryOperation. Then you can set the result limit like this:

operation.resultsLimit = 25

In this question you can see how to use a CKQueryOperation: CKQuery from private zone returns only first 100 CKRecords from in CloudKit

Community
  • 1
  • 1
Edwin Vermeer
  • 13,017
  • 2
  • 34
  • 58