核心数据 - 为什么我的 NSPredicate 没有产生正确的 SQL 查询?

Core Data - why is my NSPredicate not resulting in the correct SQL query?

这两个我都试过了NSPredicate

            let predicate = NSPredicate(format: “personID == %lld", id)
            let predicate = NSPredicate(format: “personID == %d", id)

我启用了 SQL 日志记录并在 SQL 查询结束时看到了这个:

WHERE  t0.ZPERSONID = ? 

在变量视图中,id 的值为 Int64(156),但无论我用什么代替 id,生成的 SQL 查询具有 t0.ZPERSONID = ? 用于其 WHERE 子句。因此,谓词是无用的,我每次都得到重复的记录插入。我如何获得 t0.ZPERSONID = 156

WHERE  t0.ZPERSONID = ?

是准备好的语句的(一部分)。要查看参数绑定到哪些值,请将 Core Data 调试级别设置为 3(比较 How to print Core Data debug values?):

-com.apple.CoreData.SQLDebug 3
-com.apple.CoreData.Logging.stderr 1

此外 print(predicate) 对检查创建的谓词很有用 为了正确性。

在你的情况下,问题是你传递了一个 NSNumber 实例 作为参数,但 %lld 格式需要 Int64.

您可以将 NSNumber 转换为 Int64

let id = NSNumber(value: Int64(156))

let p1 = NSPredicate(format: "personID == %lld", id.int64Value)
print(p1) // personID == 156

或者更简单,使用 %@ 格式:

let p2 = NSPredicate(format: "personID == %@", id)
print(p2) // personID == 156