#cloudkit #ckquery
#cloudkit #ckquery
Вопрос:
Был бы действительно признателен за некоторую поддержку.
Я разрабатываю приложение tvOS, которое отображает определенный контент CloudKit в TableView, данные отличаются в зависимости от текущей даты.
Каждая календарная дата соответствует данным этого типа.
например, тип записи «A13032019» относится к 13 марта 2019 года.
Я генерирую дату в правильном формате, используя функцию, запущенную в viewDidLoad (generateDate():
*
функция generateDate() {
let formatter = DateFormatter() //2016-12-08 03:37:22 0000 formatter.dateFormat = "ddMMyyyy" let now = Date() let dateString = formatter.string(from:now) NSLog("%@", dateString) let generateOperationalDate = ("A(dateString)") print(generateOperationalDate) }
Затем я пытаюсь использовать generateOperationalData для запуска в приведенном ниже CKQuery:
функция queryDatabase() {
let query = CKQuery(recordType: "(generateDate())", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)) let sort = NSSortDescriptor(key: "trainDepartureTime", ascending: true) query.sortDescriptors = [sort] database.perform(query, inZoneWith: nil) { (records, _) in guard let records = records else { return } let sortedRecords = records
Когда я пытаюсь запустить это, он выдает ошибку потока с причиной «* Завершение работы приложения из-за неперехваченного исключения ‘CKException’, причина: ‘Тип записи не может быть пустым’ * «
Итак, мне кажется, что функция queryDatabase выполняется перед функцией generateDate, однако я попытался отложить функцию queryDatabase, и это по-прежнему выдает ту же ошибку!
Могу ли я каким-либо образом сгенерировать дату (через generateDate) перед запуском функции queryDatabase?
Спасибо
Ответ №1:
Вы хотите написать generateDate(), чтобы он возвращал строку. Затем внутри queryDatabase() вызовите generateDate(), чтобы у вас гарантированно было значение для передачи в «RecordType».
Я также немного сократил вызовы. Надеюсь, это поможет.
func generateDate() -> String {
let formatter = DateFormatter()
formatter.dateFormat = "ddMMyyyy"
let dateString = formatter.string(from:Date())
return "A(dateString)"
}
func queryDatabase() {
// this will make sure you have a String value
let type = generateDate()
// now you can pass it
let query = CKQuery(recordType: type, predicate: NSPredicate(value: true))
//...
}
Комментарии:
1. Большое спасибо — это сработало отлично — очень полезно.
2. Рад это слышать.