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