Jon Gi
Jon Gi

Reputation: 39

CloudKit - Fetching 5 records with one field type... takes 3-4 seconds. why is it so slow?

I have a recordtype - "DiningTypes". "DiningTypes only has one field type, which is a string. I have 5 records... and it takes 3-4 second to load a table. How is that this is so slow? Do I need to begin the fetching process in a previous controller to have quicker UI response times?

import UIKit
import CloudKit

class table1: UITableViewController {

var categories: Array<CKRecord> = []
var fetchedcategories: Array<CKRecord> = []

override func viewDidLoad() {
    super.viewDidLoad()
    func fetchdiningtypes()

    {
        let container = CKContainer.defaultContainer()
        let publicDatabase = container.publicCloudDatabase
        let predicate = NSPredicate(value: true)

        let query = CKQuery(recordType: "DiningTypes", predicate: predicate)


        publicDatabase.performQuery(query, inZoneWithID: nil) { (results, error) -> Void in
            if (error != nil)
            {
                print("Error" + (error?.localizedDescription)!)
            }
            else
            {
                for result in results!
                {
                    self.categories.append(result)
                }

                              }
        }

    }
    fetchdiningtypes()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return categories.count
}
   override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("dining")     as! table1cell
    let restaurant: CKRecord = categories[indexPath.row]
    cell.Name.text = restaurant.valueForKey("Name") as? String

    return cell
}
}

Upvotes: 1

Views: 181

Answers (1)

farktronix
farktronix

Reputation: 3950

The default quality of service for CloudKit operations is NSQualityOfServiceUtility. If your application isn't in the foreground when the request runs you may see operations take longer than usual to run.

Try using CKQueryOperation and setting its qualityOfService to NSOperationQualityOfServiceUserInitiated.

Upvotes: 1

Related Questions