I want to check for the existence of a record with a certain predicate and, if it doesn't exist, do something:
let publicDatabase = CKContainer.default().publicCloudDatabase
let predicate: NSPredicate!
predicate = NSPredicate(format: "username == %@", usernameText)
let query = CKQuery(recordType: "user", predicate: predicate)
let configuration = CKQueryOperation.Configuration()
configuration.allowsCellularAccess = true
configuration.qualityOfService = .userInitiated
let queryOperation = CKQueryOperation(query: query)
queryOperation.desiredKeys = ["username"]
queryOperation.queuePriority = .veryHigh
queryOperation.configuration = configuration
queryOperation.resultsLimit = 1
queryOperation.recordFetchedBlock = { (record: CKRecord?) -> Void in
if let record = record {
// #1
print("record \(record)")
} else {
// #2
print("none exists")
}
}
queryOperation.queryCompletionBlock = { (cursor: CKQueryOperation.Cursor?, error: Error?) -> Void in
if let error = error {
print("\(error)")
return
}
if let cursor = cursor {
print("cursor: \(cursor)")
}
}
publicDatabase.add(queryOperation)
When a record matching the predicate exists, the record is returned as it should, but when it doesn't exist, not even nil gets returned for me to react accordingly. What I mean is ideally I want to execute my code in #2 in response to the nonexistence of any records, but recordFetchedBlock doesn't seem to run in that case.