CKQuery с сегодняшней датой

#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. Рад это слышать.