带有今天日期的 CKQuery

Posted

技术标签:

【中文标题】带有今天日期的 CKQuery【英文标题】:CKQuery with Todays Date 【发布时间】:2019-03-13 17:11:32 【问题描述】:

真的很重视一些支持。

我正在设计一个 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

当我尝试运行它时,它会抛出一个线程错误,原因是“* Terminating app due to unaught exception 'CKException', reason: 'recordType can not be empty' * "

所以在我看来,queryDatabase 函数在 generateDate 函数之前运行,但是我尝试延迟 queryDatabase 函数,这仍然会引发相同的错误!

无论如何我可以在 queryDatabase 函数运行之前生成日期(通过 generateDate)吗?

谢谢

【问题讨论】:

【参考方案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))

    //...

【讨论】:

非常感谢 - 效果很好 - 非常有帮助。 很高兴听到这个消息。

以上是关于带有今天日期的 CKQuery的主要内容,如果未能解决你的问题,请参考以下文章

带有日期(今天)的 Google 表格(脚本)中的 IF 函数

具有多种记录类型的 Swift CKQuery

使用“CONTAINS”运算符时,带有 NSPredicate 的 CKQuery 失败

CMonthCalCtrl 日历页脚文本(今天日期)

在 Sequelize 迁移中将 defaultValue 设置为今天的日期

带有自定义日期的 UIPickerView