无法使用Predicate as String从coreData获取?

时间:2018-06-06 12:41:20

标签: ios swift core-data

我无法使用字符串作为NSPredicate的直接参数来获取数据。这两者之间有什么区别吗,

//Working case
fetchRequest.predicate = NSPredicate(format: "role == %@","GK")

在上面的例子中,我能够使用谓词来获取数据。

//Not Working
predicateString = String(format:"role == %@","GK")
fetchRequest.predicate = NSPredicate(format: predicateString)

这里我无法获取数据。

上述两种情况之间的唯一区别是我使用String变量来定义谓词。这有什么不对?

2 个答案:

答案 0 :(得分:2)

当实例化NSPredicate时,%@被字符串变量替换时,字符串变量会自动被引号括起来,因此在您的示例中,谓词变为role == 'GK'

如果你想使用String(格式:...),你需要自己添加引号,但在我看来,最好直接使用NSPredicate(格式:...)来避免这样的问题

答案 1 :(得分:1)

NSPredicate的格式如下,它需要格式,格式包含均衡器。

    NSPredicate(format: <String>, <args: CVarArg...>)
    let predicate1 = NSPredicate(format: "role == %@", "GK")

在这里,如果您要查看predicate1.predicateFormat,那么您将获得:

“role == \”GK \“”

将角色"GK"置为角色,并在array中返回结果。

但是,

    let predicateString = String(format:"role == %@","GK")
    let predicate2 = NSPredicate(format: predicateString)

你用简单的字符串替换了均衡器,它无法返回任何内容。您可以查看将返回的predicate1.predicateFormat

“role == GK”

如果您想使用字符串,可以使用"role == 'GK'"

希望它会有所帮助。