CKQuery с сегодняшней датой - PullRequest
0 голосов
/ 13 марта 2019

Действительно стоило бы получить некоторую поддержку.

Я разрабатываю приложение для tvOS, которое отображает определенное содержимое CloudKit в табличном представлении, данные отличаются в зависимости от текущей даты.

Каждая календарная дата соответствует данным в этом типе.

например. RecordType "A13032019" относится к 13 марта 2019 года.

Я генерирую дату в правильном формате, используя функцию, запускаемую в ViewDidLoad (generateDate ():

*

func 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:

func 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 », причина:« recordType не может быть пустым » * "

Так что мне кажется, что функция queryDatabase работает перед функцией generateDate, однако я попытался отложить функцию queryDatabase, и это все равно вызывает ту же ошибку!

Можно ли в любом случае сгенерировать дату (с помощью generateDate) до запуска функции queryDatabase?

Спасибо

1 Ответ

0 голосов
/ 15 марта 2019

Вы хотите написать generateDate (), чтобы он возвращал String.Затем, внутри 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))

    //...
}
...