我正在尝试在Core Data中搜索特定项目
我有一个实体颜色,它具有一个ProjectColour实体NSSet。 ProjectColour实体有一个名为project的字段,它是一个项目实体,还有两个int字段,分别是fullLeft和partialLeft。这有一个名为drillType的字段,它是一个字符串。
我正在尝试所有具有rillType为Square且fullLeft和partialLeft> 0的对象
我尝试过
if searchedText.lowercased() == "square" {
let predicateNumbers = NSPredicate(format: "ANY projectColours.fullLeft > 0 OR ANY projectColours.partialLeft > 0")
let predicateDrillType = NSPredicate(format: "ANY projectColours.project.drillType == 'Square'")
fetchRequest.predicate = NSCompoundPredicate(type: .and, subpredicates: [predicateNumbers, predicateDrillType])
}
这在搜索Round作为类型但带有正方形时有效,它返回错误的对象 即 两个对象,一个是正方形,但部分和全部等于0 第二个是部分等于1的回合
示例 3种颜色对象
3个项目颜色对象
搜索时,我得到正方形,即使通过第二个Project Color对象为Round,我也会得到所有3个结果。
搜索文本时,我希望Square的所有ProjectColour.project.drillType和ProjectColour.fullLeft> 0 AND ProjectColour.partialLeft> 0
fetchRequest.predicate = NSPredicate(format: "ANY projectColours.project.drillType == 'Square'") - Works
fetchRequest.predicate = NSPredicate(format: "ANY projectColours.fullLeft > 0 OR ANY projectColours.partialLeft > 0") - Works
但是当我尝试将两者结合在一起时,它将无法工作
答案 0 :(得分:1)
假设您要搜索与给定project.drillType
和正fullLeft
和正partialLeft
有 some 个ProjectColour对象的所有Color对象:需要SUBQUERY来进行此类请求。诸如此类(未经测试):
let pred = NSPredicate(format: """
SUBQUERY(projectColours, $pc, $pc.fullLeft > 0
AND $pc.partialLeft > 0
AND $pc.project.drillType ==[c] %@
).@count > 0
""", searchedText)
还请注意,用%@
进行关键字替换比谓词格式字符串内的字符串文字更可取,并且==[c]
可用于不区分大小写的字符串比较(因此,搜索文本不需要转换为小写)