[英]Unable to fetch from coreData using Predicate as String?
我无法使用字符串作为NSPredicate的直接参数来获取数据。 两者之间有什么区别吗?
//Working case
fetchRequest.predicate = NSPredicate(format: "role == %@","GK")
在上述情况下,我可以使用谓词获取数据。
//Not Working
predicateString = String(format:"role == %@","GK")
fetchRequest.predicate = NSPredicate(format: predicateString)
在这里,我无法获取数据。
以上两种情况之间的唯一区别是,我使用的是String变量来定义谓词。 怎么了
在实例化NSPredicate时将%@替换为字符串变量时,该字符串变量会自动被引号引起来,因此在您的示例中,谓词将成为role == 'GK'
如果要使用String(format:...),则需要自己添加引号,但我认为最好直接使用NSPredicate(format:...),以避免出现此类问题。
NSPredicate
格式如下,它需要一个格式,并且格式包含均衡器。
NSPredicate(format: <String>, <args: CVarArg...>)
let predicate1 = NSPredicate(format: "role == %@", "GK")
在这里,如果您要检查predicate1.predicateFormat
,那么您将获得:
“角色== \\” GK \\“” ,
使角色与字符串"GK"
相等,并在array
返回结果。
但对于,
let predicateString = String(format:"role == %@","GK")
let predicate2 = NSPredicate(format: predicateString)
您用简单的字符串替换了均衡器,该字符串无法返回任何内容。 您可以使用predicate1.predicateFormat
进行检查,该查询将返回:
“角色== GK”
如果要使用字符串,可以在此处使用"role == 'GK'"
。
希望它会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.