gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 15:39:30 25 4
gpt4 key购买 nike

我已经尝试了这两个 NSPredicate:

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

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

WHERE  t0.ZPERSONID = ? 

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

最佳答案

WHERE  t0.ZPERSONID = ?

是准备好的语句的(一部分)。要查看参数绑定(bind)到哪些值,请将 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

关于swift - 核心数据 - 为什么我的 NSPredicate 没有产生正确的 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43911501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com