核心数据 - 为什么我的 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
这两个我都试过了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