gpt4 book ai didi

iOS Swift 复合谓词

转载 作者:行者123 更新时间:2023-11-28 13:36:43 25 4
gpt4 key购买 nike

我正在尝试在 Core Data 中搜索特定项目

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

我正在尝试所有 drillType 为 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 作为类型但使用正方形时有效,它返回错误的对象IE。两个对象,一个是正方形,但部分和全部都等于 0第二个是部分等于 1 的 Round

例子3 颜色对象

  • 1
  • 2
  • 3

3 个项目颜色对象

  • 第一。颜色(链接到颜色)= 1,完整 = 1,部分 = 1,项目(链接到项目实体)- Drill Type = Square
  • 第二。颜色 = 2,完整 = 1,部分 = 1,项目(链接到项目实体)- 钻孔类型 = 圆形
  • 第三。颜色(链接到颜色)= 1,完整 = 0,部分 = 0,项目(链接到项目实体)- Drill Type = Square

搜索时,我得到方形,我得到所有 3 个结果返回,即使第二个项目颜色对象是圆形

搜索文本时,我想要所有 ProjectColour.project.drillType 的 Square 和 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

但是当我尝试将两者结合起来时它不起作用

最佳答案

假设您要搜索所有具有一些相关 ProjectColour 对象的 Color 对象,这些对象具有给定的 project.drillType 和正 fullLeft 并且positive partialLeft:对于这样的请求,您需要一个 SUBQUERY。像(未经测试):

let pred = NSPredicate(format: """
SUBQUERY(projectColours, $pc, $pc.fullLeft > 0
AND $pc.partialLeft > 0
AND $pc.project.drillType ==[c] %@
).@count > 0
""", searchedText)

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

关于iOS Swift 复合谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56516684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com