2014-09-01 151 views
0

我有一个包含名称和地址的对象数组。 这两个属性的类型都是NSString。 但是当我用这两个结果的复合谓词时,我没有得到任何结果。如果我只使用一个谓词,它会很好地工作。 有没有人知道我的代码里出现了什么问题?日Thnx复合谓词不起作用

-(void)filterContentForSearchString:(NSString*) searchText 
{ 

NSPredicate *resultsPredicate = [NSPredicate predicateWithFormat:@"SELF.name like[cd] %@", searchText]; 
NSPredicate *resultsPredicate2 = [NSPredicate predicateWithFormat:@"SELF.place like[cd] %@", searchText]; 

    NSPredicate *compoundpred = [NSCompoundPredicate andPredicateWithSubpredicates:@[resultsPredicate, resultsPredicate2]]; 

self.searchResults = [self.companies filteredArrayUsingPredicate:compoundpred]; 
} 
+2

这是正常的,你正在寻找的东西,其中'名字'和'地点'一样吗?你在寻找'orPredicateWithSubpredicates:'而不是? – Larme 2014-09-01 13:41:42

+0

不,它关于一家公司。例如柏林的名称和地点 – dan 2014-09-01 15:22:55

+0

Try:'NSPredicate * predicate = [NSPredicate predicateWithFormat:@“SELF.name like [cd]%@”,searchText]; NSArray * results = [self.companies filteredArrayUsingPredicate:predicate]; for(YourCompagnyClass * aCompany in results){if([aCompagny.place isEqualToString:@“searchText”] {NSLog(@“IT EXISTS);}}'看看你是否真的有结果,也许你想用'contains'代替'like' – Larme 2014-09-01 15:39:07

回答

0

你可以尝试使用一个单一的谓词声明

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF.name like[cd] %@ OR SELF.place like[cd] %@", searchText, searchText]; 

和阵列与它过滤器直接

self.searchResults = [self.companies filteredArrayUsingPredicate:predicate]; 
+0

谢谢我试过单一谓词声明但是它仍然不起作用,我不知道为什么! – dan 2014-09-01 15:35:18

+1

现在它可以正常工作,谢谢收割者用单个谓词声明的提示。我不得不用“OR “而不是AND来让它工作 – dan 2014-09-01 15:48:52

+0

让我编辑答案 – Reaper 2014-09-02 06:32:29