CKQuery与今日日期

问题描述 投票:0回答:1

真的会重视一些支持。

我正在设计一个tvOS应用程序,它在tableView中显示某些CloudKit内容,数据因当前日期而异。

每个日历日期都对应于该类型中的数据。

例如RecordType“A13032019”涉及2019年3月13日。

我使用在ViewDidLoad(generateDate()中触发的func以正确的格式生成日期:

*

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函数,这仍然会抛出相同的错误!

无论如何,我可以在查询数据库函数运行之前生成日期(通过生成日期)?

谢谢

cloudkit ckquery
1个回答
0
投票

您想编写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))

    //...
}
© www.soinside.com 2019 - 2024. All rights reserved.