ios - 在 epoch 时间戳之间从 Core Data 中获取数据不一致
问题描述
我正在使用以下谓词从代表一天开始和结束的两个时间戳之间的核心数据中获取记录:
let timeStampPredicate = NSPredicate(format: "timestamp >= %f AND timestamp < %f", startTimeStamp, endTimeStamp)
上面的谓词在 11:59:00 PM 之前都可以正常工作,但是在它之后保存的任何记录,比如在11:59:22 PM都不会被谓词返回。
例子:
核心数据中的记录:
记录 1:
Timestamp: 1631816962.0
Date: 2021-09-16 18:29:22 +0000 // My TimeZone is +0530
Challenge ID: 1
Value: 100.0
记录 2:
Timestamp: 1631816902.0
Date: 2021-09-16 18:28:22 +0000 // My TimeZone is +0530
Challenge ID: 1
Value: 100.0
将值传递给谓词:
startTimeStamp : 1631730600.0 // 2021-09-15 18:30:00 +0000
endTimeStamp : 1631817000.0 // 2021-09-16 18:30:00 +0000
当我执行谓词时,仅返回 1 条记录,该记录在晚上 11:59:00之前插入
任何人都可以帮助我了解正在发生的事情或我做错了什么。
解决方案
我仍然不确定是什么导致了这个问题,因为谓词似乎很好。
为了排除所有可能性,我什至尝试使用NSComparisonPredicate
但结果仍然相同。
正如@Larme 在评论中所建议的那样,一旦我从核心数据中恢复过来,我就会尝试过滤数据。
对获取的数组做了一个简单filter(_:)
的处理。这种方法按预期工作。
如果有人可以确认是否filter
可以使用不超过 300 条记录的数组。
更新1:
如果我使用BETWEEN谓词它有点工作:
let predicate = NSPredicate(format: "%K BETWEEN {%f, %f}", argumentArray: [#keyPath(CD_Model.timestamp), startTimeStamp, endTimeStamp])
但它也包括第二天上午 12 点输入的记录,这有点违背了目的。我可能会在获取记录后过滤记录,但我觉得可能会创建它自己的边缘情况
推荐阅读
- sql - 我如何在 order by 时使用案例?
- c - 此链接列表的头部在递归语句之后指向的位置
- sql-server - 我想创建触发器来更新基于多个字符串过滤器的列中插入或更新的值
- django - 在 djangofilterbackends 中修改 django 中的 query_params
- php - 当对象存在时尝试获取非对象的属性“totalInterestPaid”
- python - 如何将小部件放在新窗口中?
- python - 在 Python 上上传新库
- flutter - 无法通过颤振中的“获取”在“包”中注册类
- python - 张量流安装成功但在 Ubuntu 20.04 上返回 NUMA 节点零警告
- file - 如何使用 Apollo 为 Meteor 设置 graphlql-upload