首页 > 解决方案 > 在 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之前插入

任何人都可以帮助我了解正在发生的事情或我做错了什么。

标签: iosswiftcore-datanspredicate

解决方案


我仍然不确定是什么导致了这个问题,因为谓词似乎很好。

为了排除所有可能性,我什至尝试使用NSComparisonPredicate但结果仍然相同。

正如@Larme 在评论中所建议的那样,一旦我从核心数据中恢复过来,我就会尝试过滤数据。

对获取的数组做了一个简单filter(_:)的处理。这种方法按预期工作。

如果有人可以确认是否filter可以使用不超过 300 条记录的数组。

更新1:

如果我使用BETWEEN谓词它有点工作:

let predicate = NSPredicate(format: "%K BETWEEN {%f, %f}", argumentArray: [#keyPath(CD_Model.timestamp), startTimeStamp, endTimeStamp])

但它也包括第二天上午 12 点输入的记录,这有点违背了目的。我可能会在获取记录后过滤记录,但我觉得可能会创建它自己的边缘情况


推荐阅读