【发布时间】:2019-06-09 17:07:30
【问题描述】:
我正在尝试在 Core Data 中搜索特定项目
我有一个实体颜色,它有一个 NSSet 的 ProjectColour 实体。 ProjectColour 实体有一个名为 project 的字段,它是一个项目实体,以及两个名为 fullLeft 和 partialLeft 的 int 字段。这有一个名为 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,项目(链接到项目实体)- 钻孔类型 = 方形
- 第二。颜色 = 2,完整 = 1,部分 = 1,项目(链接到项目实体)- 钻孔类型 = 圆形
- 第三。颜色(链接到颜色)= 1,完整 = 0,部分 = 0,项目(链接到项目实体)- 钻孔类型 = 方形
搜索时,我得到正方形,我得到所有 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
但是当我尝试将两者结合起来时它不起作用
【问题讨论】:
-
“我正在尝试所有具有 Square 的 DrillType 且 fullLeft 和 partialLeft > 0 的对象” – 这将是 ProjectColour 对象的列表,而不是 Color 对象.
-
我正在获取 Color 对象。没有 searchText 的默认搜索是列出所有 Color 对象,否则我只会得到具有 ProjectColour 对象的 Colors,而不是所有对象。可以搜索色号,也可以搜索特定关键字
标签: ios swift nscompoundpredicate