Я работаю над проектом на основе CloudKit, где было бы очень полезно использовать дескрипторы сортировки для получения самых последних результатов из базы данных.
func getConversationPosts(for targetConversation: MessageConversation, completionHandler: @escaping ([MessagePost]) -> Void) {
var post = MessagePost()
let getRecordsOperation = CKQueryOperation()
getRecordsOperation.qualityOfService = .userInteractive
getRecordsOperation.resultsLimit = 1
getRecordsOperation.query = CKQuery(recordType: "MessagePost", predicate: NSPredicate(format: "conversationName = %@", targetConversation.conversationID.recordName))
getRecordsOperation.query?.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] // If you comment this out results are returned
/*getPostsOperation.queryCompletionBlock = {(searchCursor, error) in
print("sQ: \(searchCursor)")
}*/
getRecordsOperation.recordFetchedBlock = {(postRecord) in
let newPost = MessagePost()
newPost.textContent = postRecord.value(forKey: "textContent") as! String
newPost.poster = User(userName: postRecord.value(forKey: "postUser") as! String)
// posts.append(newPost)
post = newPost
}
getRecordsOperation.completionBlock = {() in
completionHandler(post)
}
OperationQueue().addOperation(getRecordsOperation)
}
Приведенный выше код всегда работает, если строка, добавляющая sortDescriptors
, удалена. Даже без ограничения результата, если добавлен какой-либо дескриптор сортировки, recordFetchedBlock
даже не вызывается, но блок завершения есть. Что может быть причиной этого?