【发布时间】:2021-11-11 13:46:16
【问题描述】:
我正在使用以下谓词从代表一天开始和结束的两个时间戳之间的 Core Data 获取记录:
let timeStampPredicate = NSPredicate(format: "timestamp >= %f AND timestamp < %f", startTimeStamp, endTimeStamp)
上述谓词在 11:59:00 PM 之前都可以正常工作,但是在它之后保存的任何记录,例如在 11:59:22 PM 都不会被谓词。
示例:
Core Data 中的记录:
记录 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 PM
之前插入谁能帮助我了解发生了什么或我做错了什么。
【问题讨论】:
-
启用 Core Data 详细日志记录(参见例如stackoverflow.com/q/12306343/1187415)
-
@MartinR SQLite 查询也只显示了 1 个返回的行 :( 。我可以用任何其他方式构造谓词吗?
-
在您的示例中,挑战 ID 是相同的,您不关心它的唯一性,对吗?您能否在没有谓词的情况下执行请求,然后尝试将您的谓词应用于结果?也许一块一块地(在 2 个谓词中,不仅是第一个),并检查为什么第二个记录无效?
-
@Larme 我确实关心挑战 ID,因为我可能会查询不同的挑战。在获取挑战 ID 的所有数据后进行过滤按预期工作。感谢提及它。
-
您是否使用 NSPredicate 和
evaluate()过滤了之前失败的相同谓词?
标签: ios swift core-data nspredicate