NSPredicate使用OR错误

时间:2013-01-02 07:02:51

标签: iphone ios core-data nspredicate

首次构建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];

我做错了什么?

3 个答案:

答案 0 :(得分:2)

NSString *key;
NSMutableArray *tempArray;
NSPredicate *searchForName = [NSPredicate predicateWithFormat:@"name = %@", key];
NSArray *filterArray = [tempArray filteredArrayUsingPredicate:searchForName];
NSLog(@"%@",filterArray);

是您的searchKeyword, tempArray 是您的CompleteArray,其中包含数据。

像这样使用。请提供您的数据。

答案 1 :(得分:2)

使用此

NSPredicate* predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ '%@'", @"SELF contains[c] ",searchText]];

答案 2 :(得分:0)

要获取所有Carsname对象,这些对象是keys集或数组中的字符串之一,请使用

[NSPredicate predicateWithFormat:@"name IN %@", keys]