1

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

我究竟做错了什么?

4

3 回答 3

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

其中key是您的 searchKeyword,tempArray是存在数据的 CompleteArray。

像这样使用。请把你的数据。

于 2013-01-02T07:26:08.920 回答
2

用这个

NSPredicate* predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ '%@'", @"SELF contains[c] ",searchText]];
于 2013-01-02T08:58:29.757 回答
0

要获取所有Cars具有 a这是集合或数组name中的字符串之一的对象,请使用keys

[NSPredicate predicateWithFormat:@"name IN %@", keys]
于 2013-01-02T14:26:25.460 回答