Core data 使用谓词在结果中搜索

Core data 使用谓词在结果中搜索,core-data,swift,ios8,nspredicate,Core Data,Swift,Ios8,Nspredicate,我已经创建了一个汽车的核心数据模型,我想选择一种汽车类型加上几种不同颜色中的任何一种,我设想这样做: 选择视图控制器 1) 选择汽车类型(轿车、双门轿车、SUV、混合动力车)(我设想使用分段控制将其设置为谓词) 2) 一旦选择了车辆类型,我想从颜色列表中进行选择,并且只显示满足我在第一步中选择的车辆类型的车辆。例如,我只想显示红色、绿色和蓝色的SUV,或者只显示黑色和白色的混合动力车 结果TableViewController 3) 一旦这些被选中,我想把它们放在另一台TVC上 这篇文章有点帮助

我已经创建了一个汽车的核心数据模型,我想选择一种汽车类型加上几种不同颜色中的任何一种,我设想这样做:

选择视图控制器

1) 选择汽车类型(轿车、双门轿车、SUV、混合动力车)(我设想使用分段控制将其设置为谓词)

2) 一旦选择了车辆类型,我想从颜色列表中进行选择,并且只显示满足我在第一步中选择的车辆类型的车辆。例如,我只想显示红色、绿色和蓝色的SUV,或者只显示黑色和白色的混合动力车

结果TableViewController

3) 一旦这些被选中,我想把它们放在另一台TVC上

这篇文章有点帮助,但是问问题的人试图找到不同的项目(例如:a、B和C)。我试着在A内找到X,Y和Z。

当我尝试检索一种类型的车辆以及选定颜色的列表时,我遇到了麻烦

let vehiclePredicate = NSPredicate(format: "type == %@", "(one of sedan/coupe/SUV/hybrid)")
以及下列任何一项准则

let colorRedPredicate = NSPredicate(format: "color == %@", "red")
let colorGreenPredicate = NSPredicate(format: "color == %@", "green")
let colorBluePredicate = NSPredicate(format: "color == %@", "red")
let colorBlackPredicate = NSPredicate(format: "color == %@", "black")
let colorWhitePredicate = NSPredicate(format: "color == %@", "white")

let colorPredicates: NSArray = [**add colors here when they're selected**]
我试图找出最干净的方法来实现这一点,但我发现的示例只检索不同的项


我遇到的另一个障碍是如何将结果从SelectionVC传输到ResultsTVC。我知道我需要一名代表,但我需要什么?在此方面的任何帮助都将不胜感激。

您希望以如下谓词结束:

type == %@ AND color IN %@
然后将您的字体作为字符串提供,颜色作为集合提供。您可以使用由另外两个谓词创建的复合谓词来执行此操作,或者只需更改UI选择的含义,并生成两个参数作为段名称和颜色数组


如果要组合双簧管的多个选项,则需要创建每个选项,然后使用复合谓词组合它们。

您的问题不清楚。您的谓词有错误的语法-无法理解。话虽如此,我想我猜你想要什么,就在这里

您可以从完全加载的表视图开始,而不使用任何过滤器。您可以实现一个过滤器菜单(或按钮),并以模式显示相应的控件(分段控件、具有多个选择的表视图、具有单个选择的表视图、滑块等)

在原始表视图中,使用
NSFetchedResultsController
,并将
NSPredicate
保留为属性。每当谓词发生更改时,您将
nil
取出获取的结果控制器并重新加载表

模态控件视图可以反馈给主视图控制器,然后主视图控制器修改谓词。您可以使用
NSCompoundPredicate
API组合所有谓词。也许将它们保存在一个可变数组中是最方便的,这样您就可以方便地使用它们了

var predicateArray = [NSPredicate]()
从这个开始

predicate = NSPredicate(value: "true")
predicateArray.append(predicate)
现在,颜色控制器返回
[“红色”、“绿色”、“蓝色”]
。您可以通过构造正确的谓词字符串,或使用
或predicateWithSubpredicates
来构造or谓词,但只使用集合运算符可能更容易:

let colorPredicate = NSPredicate(format: "color in %@", colorStrings)!
predicateArray.append(colorPredicate)
在fetched results controller getter中,根据谓词数组重新构造谓词:

fetchRequest.predicate = 
   NSCompoundPredicate.andPredicateWithSubpredicates(predicateArray)

你是指和颜色,还是指它们?车辆类型和[颜色谓词]示例:混合动力车和[白色]、轿车和[红色和蓝色]谢谢!用我上面得到的,对于我们这些咬牙切齿的人来说,完整的谓词是什么样子的?我不知道你的轿车和红色和蓝色是如何工作的,我希望你想要或者颜色,然后我展示的格式是你唯一需要的,如果需要多个类型+颜色选项,请使用复合谓词。