我正在制作一个应用程序,该应用程序具有使用CloudKit作为我的后端的特定团队的任务。我已经进行了设置,以便您看到的第一个屏幕是团队列表。当您选择团队时,我想看到与该特定团队相关的所有任务。我已经获得了保存和获取任务的应用程序,但所有任务都显示在每个团队下。
我是CloudKit的新手(之前我使用过Parse),也是谓词的新手。目前,我使用prepareForSegue
函数将团队recordID作为字符串传递给我的任务视图控制器。在Parse中,我只需要为该团队完成任务。我可以看到,当我查看CloudKit Dashboard时,保存工作正常(每个任务在其记录中都有正确的团队记录ID)。
我知道问题出现在下一段代码中,但我不确定如何去做。
func loadTasks() {
tasks = [CKRecord]()
let query = CKQuery(recordType: "Tasks", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
publicData.performQuery(query, inZoneWithID: nil) { (results:[CKRecord]?, error:NSError?) -> Void in
if let tasks = results {
self.tasks = tasks
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.tableView.reloadData()
})
}
}
self.refreshControl?.endRefreshing()
}
所以我想我正在问如何使用谓词来过滤数据,只显示所选团队的任务。我只有我目前拥有的东西,因为我遵循了教程。
答案 0 :(得分:1)
不是传递当前谓词,而是使用以下内容:
let predicate = NSPredicate(format: "team == %@", team)
let query = CKQuery(recordType: "Tasks", predicate: predicate)
团队是相关团队,可能是CKReference。
答案 1 :(得分:1)
迈克尔,
谓词就像一个正则表达式。你熟悉正则表达式吗?如果你是,那么你会发现谓词是一块蛋糕。
您在这里的所有说法是,我希望您返回“任务”数据库中的所有记录,其中团队字段等于团队变量中的值。
你的名字,迈克尔回答了这个问题;说实话,他应该得到一些荣誉。
希望这个简短的解释有所帮助!
答案 2 :(得分:0)
我明白了。
我还没有完全理解它,但它确实有效。如果有人愿意解释这一点,我将不胜感激。
let query = CKQuery(recordType: "Tasks", predicate: NSPredicate(format: "team==%@", self.team))