Search code examples
objective-cxcodeswiftcloudkit

CloudKit ___recordID is not marked queryable


I tried to save data to the CloudKit programmatically with success but I got an error when I fetch data from CloudKit

I got an error

> <CKError 0x608000052060: "Invalid Arguments" (12/2015); server message
> = "Field '___recordID' is not marked queryable"; uuid = 19F1E556-5384-42FD-8F65-9FD8A9C9523D; container ID =
> "iCloud.com.mywebsite.CloudDemo">

This is my code.

func saveNewRecordTypeToCloud()  {
        // Prepare the record to save
        var record = CKRecord(recordType: "Members")
        record.setValue("test", forKey: "name")
        record.setValue("test", forKey: "surname")

        // Get iCloud Database
        let cloudContainer = CKContainer.defaultContainer()
        let database = CKContainer.defaultContainer().privateCloudDatabase

        // Save the record to iCloud
        database.saveRecord(record, completionHandler: { (record:CKRecord!, error:NSError! ) in
            if error != nil {
                NSLog(error.localizedDescription)
            } else {
                dispatch_async(dispatch_get_main_queue()) {
                    println("finished")
                }
            }
        })



    }



 func getRecordsFromCloud() {
        // Fetch data using Convenience API
        let cloudContainer = CKContainer.defaultContainer()
        let publicDatabase = CKContainer.defaultContainer().privateCloudDatabase
        let predicate = NSPredicate(value: true)
        let sort = NSSortDescriptor(key: "creationDate", ascending: false)
        let query = CKQuery(recordType: "Members", predicate: predicate)
        query.sortDescriptors = [sort]
        publicDatabase.performQuery(query, inZoneWithID: nil, completionHandler: {
            results, error in
            if error == nil {


                self.members = results as! [CKRecord]

                println(self.members)



            } else {
                println(error)
            }
        }) }

To resolve such the problem, I had to set the Metadatas Index via Web DashBoard but I want to know if I could set the Metadatas Index by the code?

If so, please give me some code sample.

Thank you for all answers.


Solution

  • Sorry, there is no way to set indexes from code. You have to do this in the CloudKit dashboard.