我已尝试过这两个NSPredicate
s:
let predicate = NSPredicate(format: “personID == %lld", id)
let predicate = NSPredicate(format: “personID == %d", id)
我启用了SQL日志记录,并在SQL查询结束时看到了这一点:
WHERE t0.ZPERSONID = ?
在变量视图中,id
的值为Int64(156)
,但无论我使用id
代替什么,生成的SQL查询的WHERE都为t0.ZPERSONID = ?
条款。因此,谓词是无用的,我每次都会重复记录插入。我如何获得t0.ZPERSONID = 156
?
答案 0 :(得分:1)
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