2017-05-15 41 views
0

需要核心數據讀取請求錯誤謂詞

我必須找到rec_name的記錄是「蘋果的Macbook 256GB」 & isActive ==真。

獲取請求

fetchRequest.predicate = NSPredicate(format: "rec_name LIKE[cd] *%@* AND rec_name LIKE[cd] *%@* AND isActive = %@","apple","macbook",true) 

錯誤

Unable to parse the format string "rec_name LIKE[cd] *%@* AND rec_name LIKE[cd] *%@* AND isActive = %@" 

謝謝

+0

一個佔位符的'Bool'是' %d'或'%ld'而不是'%@' – vadian

+0

@vadian,感謝您的幫助,但仍然無法正常工作! – nirav

+0

試試這個:let predicate = NSPredicate(format:「rec_name LIKE [cd] *%@ * AND rec_name LIKE [cd] *%@ * AND isActive =%@」,「apple」,「macbook」,NSNumber(booleanLiteral: true)) – KKRocks

回答

1

問題是因爲*%@*這裏%@*之間不是由字符串參數代替,從而NSPredicate是不是能夠讓您的查詢LIKE *apple*LIKE *macbook*你需要做的是做什麼帶有通配符和Like的搜索字符串只需使用%@,同樣@Vadian建議使用數字而不是Bool

let searchkeyword1 = "apple" 
let searchkeyword2 = "macbook" 

//Make search string wildcards charaters 
let searchString1 = "*\(searchkeyword1)*" 
let searchString2 = "*\(searchkeyword2)*" 

fetchRequest.predicate = NSPredicate(format: "rec_name LIKE[cd] %@ AND rec_name LIKE[cd] %@ AND isActive = %@", searchString1,searchString2, true as NSNumber) 

而且連擊選項這裏是你可以使用CONTAINS並沒有必要使用通配符。

fetchRequest.predicate = NSPredicate(format: "rec_name CONTAINS[cd] %@ AND rec_name CONTAINS[cd] %@ AND isActive = %@", "apple","macbook", true as NSNumber) 

你可以做一件事,如果你想找到的所有記錄開始與蘋果和用的MacBook結束,那麼你可以簡單地使用BEGINSWITHENDSWITH

fetchRequest.predicate = NSPredicate(format: "rec_name BEGINSWITH[cd] %@ AND rec_name ENDSWITH[cd] %@ AND isActive = %@", "apple","macbook", true as NSNumber) 
+1

Better :'NSNumber(value:true)'或'true as NSNumber',比較http://stackoverflow.com/a/42933246/1187415。通常沒有理由調用「xxxLiteral」初始值設定項,它們僅用於編譯器。 –

+1

@MartinR感謝您的建議,編輯答案 –

+0

感謝Nirav的回答,它的工作原理! – nirav

0

試試這個

fetchRequest.predicate = NSPredicate(format: "rec_name LIKE[cd] %@ AND rec_name LIKE[cd] %@ AND isActive = %@","apple","macbook",NSNumber(booleanLiteral: true)) 
0

您需要設置一個查詢謂詞類似以下內容:

fetchRequest.predicate = NSPredicate(format: "rec_name == %@ AND isActive == %@" , "Apple 256GB Macbook", NSNumber(booleanLiteral: true)) 

我不認爲我們需要使用一樣,如果你正在尋找完美的匹配。

0

試試這個

NSPredicate(format: "rec_name == %@ AND rec_name == %@ AND isActive = %d","apple","macbook",true)