Ios 复合谓词

Ios 复合谓词,ios,swift,nscompoundpredicate,Ios,Swift,Nscompoundpredicate,我正在尝试搜索核心数据中的特定项 我有一个实体颜色,它有一组ProjectColor实体。ProjectColor实体有一个名为project的字段,它是一个项目实体,还有两个名为fullLeft和partialLeft的int字段。这有一个名为drillType的字段,它是一个字符串 我正在尝试删除所有类型为Square且fullLeft和partialLeft>0的对象 fetchRequest.predicate = NSPredicate(format: "ANY projectColo

我正在尝试搜索核心数据中的特定项

我有一个实体颜色,它有一组ProjectColor实体。ProjectColor实体有一个名为project的字段,它是一个项目实体,还有两个名为fullLeft和partialLeft的int字段。这有一个名为drillType的字段,它是一个字符串

我正在尝试删除所有类型为Square且fullLeft和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
我试过了

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])
}
当搜索“圆形”作为类型但使用“方形”时,此选项有效,因为它返回了错误的对象 即 两个对象,一个是正方形,但部分和完全等于0 第二个是部分等于1的圆

范例 3个彩色物体

  • 一,
  • 二,
  • 三,
3个项目颜色对象

  • 第一。颜色(链接到颜色)=1,完整=1,部分=1,项目(链接到项目实体)-钻孔类型=方形
  • 第二。颜色=2,完整=1,部分=1,项目(链接到项目实体)-钻孔类型=圆形
  • 三,。颜色(链接到颜色)=1,完整=0,部分=0,项目(链接到项目实体)-钻孔类型=方形
当搜索时,我得到了正方形,我得到了所有3个结果返回,即使第二个项目的颜色对象是圆形的


搜索文本时,我希望所有的projectColor.project.drillType均为正方形,projectColor.fullLeft>0和projectColor.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

但是,当我尝试将两者结合起来时,它不起作用,假设您希望搜索所有颜色对象,这些颜色对象具有与给定
项目相关的ProjectColor对象。drillType
和positive
fullLeft
和positive
partialLeft
:对于此类请求,您需要一个子查询。类似于(未经测试):


还请注意,使用
%@
替换关键字优于谓词格式字符串中的字符串文字,并且
==[c]
可用于不区分大小写的字符串比较(因此搜索文本不需要转换为小写)

“我正在尝试删除所有drillType为Square且fullLeft和partialLeft>0的对象”–这将是ProjectColor对象的列表,而不是颜色对象。我正在获取颜色对象。没有searchText的默认搜索是列出所有颜色对象,否则我将只获取具有ProjectColor对象的颜色,而不是所有颜色对象。您可以搜索颜色编号,或搜索特定关键字,不设置结果不完全是这样。小写字母纯粹是为了让用户在什么情况下搜索它都不会选择它,实际值以大写字母开始。即,Square/Square,Square all搜索Square@CeriTurner:您能否以某种方式显示示例数据集(以及预期结果列表)?也许我误解了你的问题。在主菜单中添加了一些信息post@CeriTurner:那么您要获取哪些对象?没有drillType为Square且fullLeft和partialLeft>0的ProjectColor。搜索文本时,我需要所有ProjectColor.project.drillType为Square和ProjectColor.fullLeft>0且ProjectColor.partialLeft>0 fetchRequest.predicate=NSPredicate(格式:“ANY projectcolors.project.drillType='Square'”)-Works fetchRequest.predicate=NSPredicate(格式:“ANY projectcolors.fullLeft>0或ANY projectcolors.partialLeft>0”)-Works,但当我尝试将两者结合使用时,它不起作用