带有今天日期的CKQuery

时间:2019-03-13 17:11:33

标签: cloudkit ckquery

真的很重视一些支持。

我正在设计一个tvOS应用程序,该应用程序在tableView中显示某些CloudKit内容,数据根据当前日期而有所不同。

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

例如RecordType“ A13032019”与2019年3月13日相关。

我使用在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函数,但这仍然会引发相同的错误!

反正我可以在queryDatabase函数运行之前生成日期(通过generateDate)吗?

谢谢

1 个答案:

答案 0 :(得分: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))

    //...
}