为什么这个谓词格式被变成'= nil'
Why is this predicate format being turned into '= nil'
有人建议 与我的问题完全相同,但是,我的应用程序没有崩溃,我也没有迁移到 Swift 3。它只是没有返回任何内容结果。所以解决方案本质上是相同的,但我的问题所基于的行为却大不相同。
今天早上阅读了很多帖子后,我非常有信心这段代码是正确的并且应该可以工作:
func fetchUnits(weightUnitUid: Int? = nil) -> [WeightUnit] {
let fetchRequest = NSFetchRequest(entityName: "WeightUnit")
if let weightUnitFilter = weightUnitUid {
let filterPredicate = NSPredicate(format: "uid = %@", weightUnitFilter)
fetchRequest.predicate = filterPredicate
}
但在调试控制台中是这样的:
(lldb) po filterPredicate // uid == nil
我传递的是 0,此时 weightUnitUid
实际上是 0,所以我期望:
uid == 0
我知道 %@
应该能够处理 NSNumber,而这正是我所需要的。我哪里错了。
谢谢
%@
格式需要一个 Foundation 对象作为参数,零
被解释为 nil
.
您可以将整数转换为 NSNumber
:
let filterPredicate = NSPredicate(format: "uid = %@", weightUnitFilter as NSNumber)
或改用 "long int" 格式:
let filterPredicate = NSPredicate(format: "uid = %ld", weightUnitFilter)
有人建议
今天早上阅读了很多帖子后,我非常有信心这段代码是正确的并且应该可以工作:
func fetchUnits(weightUnitUid: Int? = nil) -> [WeightUnit] {
let fetchRequest = NSFetchRequest(entityName: "WeightUnit")
if let weightUnitFilter = weightUnitUid {
let filterPredicate = NSPredicate(format: "uid = %@", weightUnitFilter)
fetchRequest.predicate = filterPredicate
}
但在调试控制台中是这样的:
(lldb) po filterPredicate // uid == nil
我传递的是 0,此时 weightUnitUid
实际上是 0,所以我期望:
uid == 0
我知道 %@
应该能够处理 NSNumber,而这正是我所需要的。我哪里错了。
谢谢
%@
格式需要一个 Foundation 对象作为参数,零
被解释为 nil
.
您可以将整数转换为 NSNumber
:
let filterPredicate = NSPredicate(format: "uid = %@", weightUnitFilter as NSNumber)
或改用 "long int" 格式:
let filterPredicate = NSPredicate(format: "uid = %ld", weightUnitFilter)