nspredicate - 带有 modifyDate 的 CloudKit 查询始终不返回任何结果
问题描述
User
我的目标是从我在 s 数组中指定的 CloudKit获取记录,CKRecord.ID
但前提是它们的更新时间比我在本地跟踪的上次更新日期更新。
我正在执行以下 CloudKit 查询:
var predicate:NSPredicate
if let lastChecked = defaults.object(forKey: "lastUserFetch") as? Date{
//Subsequent fetches
predicate = NSPredicate(format: "modificationDate > %@ AND recordID IN %@", argumentArray: [lastChecked, userRecordIDs])
}else{
//First fetch
predicate = NSPredicate(format: "recordID IN %@", argumentArray: [userRecordIDs])
}
let query = CKQuery(recordType: "User", predicate: predicate)
let operation = CKQueryOperation(query: query)
...
我最初设置lastUserFetch
为nil
我的应用程序启动时,并且查询的“第一次获取”部分成功。我取回所有用户记录。
但是一旦我在查询完成后设置我的lastUserFetch
日期:
defaults.set(Date(), forKey: "lastUserFetch")
包含该部分时,我会0
返回记录。modificationDate > %@
当然,我修改了 CloudKit 仪表板中的记录,我可以看到它们modificationDate
已经更新并且比我的lastUserFetch
日期更新,但它们仍然没有在我的搜索结果中返回。
如何将modificationDate
比较与recordID IN
查询结合起来?
解决方案
var predicate:NSPredicate
//Every fetch
predicate = NSPredicate(format: "recordID IN %@", argumentArray: [userRecordIDs])
if let lastChecked = defaults.object(forKey: "lastUserFetch") as? Date{
//Subsequent fetches
predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate, NSPredicate(format: "modificationDate > %@", argumentArray: [lastChecked]))
}
let query = CKQuery(recordType: "User", predicate: predicate)
let operation = CKQueryOperation(query: query)
...
推荐阅读
- html - Angular 模板驱动表单:验证至少一个已填充
- html - 为什么 Atom 报相同 ID 错误失败?
- python - 如何在 Python 中创建文件?
- php - Laravel 8 - 在 StudentController.php 中找不到错误类“App\Student”
- wpf - 如何向 RichTextBox 中的段落元素添加额外功能
- php - PHP API 偏移分页
- html - 使用隐藏元素代码时,文本不在列的中心
- python-3.x - 形状与多类分类器不兼容
- html - 要检查默认角度的白色重新加载复选框
- php - 使用 CentOS 8 在 PHP 7.4 中安装 pdo_sqlsrv 驱动程序