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

标签 ios iphone swift database core-data

需要

我必须找到 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)

如果你想找到所有以 apple 开头以 macbook 结尾的记录,你可以再做一件事,然后你可以简单地使用 BEGINSWITHENDSWITH

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

关于ios - 谓词的核心数据提取请求错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43972780/

相关文章:

ios - 转换到新的 View Controller 时如何更新状态栏样式?

ios - 我怎样才能获得 ios 应用程序的响应能力

objective-c - Objective C-iCal 不在 iOS 9 中为其创建自定义日历和新事件

android - 有多少用户启用了推送通知?

ios - 为什么我不能在 NSManagedObject 子类计算属性中使用关系? (核心数据, swift )

ios - 调用完成处理程序后正在执行的代码

iphone - 从 ViewController 中移除 UIView

ios - 是否有可能根据操作系统的版本拥有特定版本的应用程序?

swift 4 迁移

json - 使用 Swift 4 Decodable 解析 JSON