真的会重视一些支持。
我正在设计一个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函数,这仍然会抛出相同的错误!
无论如何,我可以在查询数据库函数运行之前生成日期(通过生成日期)?
谢谢
您想编写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))
//...
}