繁体   English   中英

无法使用谓词作为字符串从coreData获取?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM