Swift 为什么将此谓词格式转换为';=无';
有人建议这完全是我问题的重复,但是,我的应用程序没有崩溃,我也没有迁移到Swift 3。它只是没有返回任何结果。所以答案基本上是一样的,但我的问题所基于的行为却完全不同 今天早上读了很多文章后,我非常确信这段代码是正确的,应该可以工作:Swift 为什么将此谓词格式转换为';=无';,swift,core-data,nspredicate,Swift,Core Data,Nspredicate,有人建议这完全是我问题的重复,但是,我的应用程序没有崩溃,我也没有迁移到Swift 3。它只是没有返回任何结果。所以答案基本上是一样的,但我的问题所基于的行为却完全不同 今天早上读了很多文章后,我非常确信这段代码是正确的,应该可以工作: func fetchUnits(weightUnitUid: Int? = nil) -> [WeightUnit] { let fetchRequest = NSFetchRequest(entityName: "WeightUnit")
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过滤器预测//uid==nil
我正在传递0,此时实际上,weightUnitUid
是0,所以我希望:
uid==0
我知道%@
应该能够处理NSNumber,这就是我需要的。我错在哪里
谢谢< p> <代码> %@ < /Cord>格式期望一个基础对象作为参数,为零 被解释为
nil
您可以将整数转换为NSNumber
:
let filterPredicate = NSPredicate(format: "uid = %@", weightUnitFilter as NSNumber)
或者改用“long int”格式:
let filterPredicate = NSPredicate(format: "uid = %ld", weightUnitFilter)
嗨@MartinR,谢谢你的回答,但我不认为我的问题是完全重复的。在本例中,解决问题的答案似乎是相同的,但我的应用程序没有崩溃。它只是没有返回任何结果。我也没有迁移到Swift 3。我想如果您尝试使用其他值而不是0,它应该会崩溃。它将带0值的%@解释为nil@Larme,可能是真的。但现在它工作了,我就不去碰它了。:-)谢谢你,马丁。这两个建议都奏效了。我仍然没有得到我期望的结果,但这需要另一个问题。