有人建议这个线程 https://stackoverflow.com/questions/40686005/nspredicate-crash-after-swift-3-migration与我的问题完全相同,但是,我的应用程序没有崩溃,并且我没有迁移到 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
I know %@
应该能够处理 NSNumber 这就是我所需要的。我哪里出错了。
Thanks
The %@
格式需要一个 Foundation 对象作为参数,零
被解释为nil
.
您可以将整数转换为NSNumber
:
let filterPredicate = NSPredicate(format: "uid = %@", weightUnitFilter as NSNumber)
或使用“long int”格式代替:
let filterPredicate = NSPredicate(format: "uid = %ld", weightUnitFilter)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)