0

真的很重视一些支持。

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

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

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

我使用 ViewDidLoad (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 中运行:

函数查询数据库(){

    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)吗?

谢谢

4

1 回答 1

0

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

    //...
}
于 2019-03-15T02:43:48.063 回答