2014-09-01 73 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