簡體   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