真的很重视一些支持。
我正在设计一个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)吗?
谢谢
答案 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))
//...
}