NSPredicate 使用 OR 错误
Posted
技术标签:
【中文标题】NSPredicate 使用 OR 错误【英文标题】:NSPredicate using OR error 【发布时间】:2013-01-02 07:02:51 【问题描述】:第一次构建NSPredicate
。
我想使用以下逻辑搜索managedobjectcontext
:
Search for a, grab all matches
Search for b, grab all matches, etc....
Nsarray *results = (has all a results, b results, etc);
我尝试的谓词是:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name== %@ OR name == %@ OR name == %@",a,b,c];
但是我得到了这个predicate
的错误...
已编辑:我编写的示例方法
-(NSPredicate*)parsePartsIntoAPredicate:(NSMutableArray*)inputPartsNames
NSSet *keys=[NSSet setWithArray:inputPartsNames];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"any self.@name in %@", keys];
NSLog(@"predicate = %@",predicate);
return predicate;
澄清:我有一个汽车数据库(20,000 辆)每辆汽车都有多个零件。我想找到所有具有 a 部分的汽车,所有具有 b 部分的汽车,以及所有具有 c 部分的汽车。然后我想返回一个包含 a、b、c 等部分的汽车的数组......
如果您认为有更好的方法,请告诉我,但我正在倒退。我说的是
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Cars" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:[self parsePartsIntoAPredicate:inputParts]];
NSError *error;
NSArray *records = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
我做错了什么?
【问题讨论】:
你的问题一点都不清楚,看看这个问题看看第一个答案NSPredicate 'OR' filtering based on an NSArray of keys 并尝试在你的代码中使用它 你得到什么错误?可能是错字,但“NSpredicate”中的“p”应该是大写。 尽量把它说得更清楚,在没有太多信息的情况下提供帮助有点冒险! 要获得有用的答案,您必须至少显示:1) 托管对象实体的定义,2) 准确的谓词和获取请求(复制/粘贴没有拼写错误!),3) 准确的错误信息。 你得到什么错误?name
是 Cars
实体的属性吗?在这种情况下,请尝试[NSPredicate predicateWithFormat:@"name IN %@", keys]
。
【参考方案1】:
NSString *key;
NSMutableArray *tempArray;
NSPredicate *searchForName = [NSPredicate predicateWithFormat:@"name = %@", key];
NSArray *filterArray = [tempArray filteredArrayUsingPredicate:searchForName];
NSLog(@"%@",filterArray);
key 是您的搜索关键字,tempArray 是您的 CompleteArray,其中存在数据。
像这样使用。请输入您的数据。
【讨论】:
对现有数组进行排序或将谓词放入获取请求中是否更快?所以本质上,我会问所有汽车的coredata,然后一一找到与每个部分匹配的汽车吗?【参考方案2】:使用这个
NSPredicate* predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ '%@'", @"SELF contains[c] ",searchText]];
【讨论】:
输入必须是可变的......它可以是 2 个变量,也可以是 100。这也会做 OR 吗?所以找到所有有a的,找到所有有b的,找到所有有c的,等等......【参考方案3】:要获取所有具有name
的Cars
对象,keys
集合或数组中的字符串之一,请使用
[NSPredicate predicateWithFormat:@"name IN %@", keys]
【讨论】:
以上是关于NSPredicate 使用 OR 错误的主要内容,如果未能解决你的问题,请参考以下文章