NSPredicate与多个文本字段

时间:2014-09-06 01:36:44

标签: ios objective-c xcode core-data nspredicate

我正在开发一个Core Data应用程序,允许用户将数据添加到表视图中。每个对象都有三个不同的属性。在文本字段中键入属性后,用户然后保存数据对象;在表格视图中可以看到它们。

我还实现了一个搜索功能,让用户可以使用NSPredicate根据属性搜索对象。我查看了this指南和此tutorial以获取有关如何执行此操作的信息。每个属性对应一个谓词,如下面的代码所示。

我的问题是用户只能根据第一个属性搜索对象。因此,当他们在第一个属性的文本字段中输入内容时,搜索将返回正确的结果,并且每个属性都显示在文本字段中。如果用户尝试使用第二个或第三个属性进行搜索,则不会返回任何内容。

NSPredicate *predAttOne =
[NSPredicate predicateWithFormat:@"(name CONTAINS %@)",
 _one.text];
[request setPredicate:predAttOne];


//////////////PROBLEM CODE///////////////

//If the code below is commented out, the user is able to search using 
//the first attribute successfully, and al the data attributes are shown 
//in the text fields. If it's not commented out, no data is found.

NSPredicate *predAttTwo =
[NSPredicate predicateWithFormat:@"(mint CONTAINS %@)",
 _two.text];
[request setPredicate:predAttTwo];

NSPredicate *predAttThree =
[NSPredicate predicateWithFormat:@"(year CONTAINS %@)",
 _three.text];
[request setPredicate:predAttThree];

有谁知道如何根据不同的属性使用谓词进行搜索?我知道复合谓词,但我不确定这是我需要的情况。

非常感谢!

1 个答案:

答案 0 :(得分:1)

你可以这样做谓词:

[NSPredicate predicateWithFormat:@"(name CONTAINS %@) OR (mint CONTAINS %@) OR (year CONTAINS %@)",  _two.text, _two.text, _two.text];