核心数据 谓词的提取请求错误



>Need

我必须找到rec_name记录是"Apple 256GB Macbook"&isActive == true。

提取请求

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 = %@"

谢谢

问题是因为这里*%@* *之间的%@没有被字符串参数替换,所以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)

试试这个

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

您需要设置如下所示的谓词查询:

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

我认为我们不需要使用 喜欢 如果您正在寻找完美的匹配。

试试这个

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

相关内容

最新更新