我想搜索用户输入的字符串以检入多个字符串。 我尝试过使用OR,但它没有用。
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat: @"address contains[c] %@ || approved contains[c] %@ || businessName contains[c] %@ || city contains[c] %@ || country contains[c] %@ || dealerNo contains[c] %@ || dealerId contains[c] %@ || email contains[c] %@ || fax contains[c] %@ || phone contains[c] %@ || published contains[c] %@ || regionNum contains[c] %@ || state contains[c] %@ || website contains[c] %@ || zip contains[c] %@ || businessName contains[c] %@ || businessName contains[c] %@ || businessName contains[c] %@", searchText];
//Here address, approved, businessName.... all these string, I want to search in.
searchResults = [cellData filteredArrayUsingPredicate:resultPredicate];
//cellData is my total array
//searchResults is array after filtering
}
提前致谢。
答案 0 :(得分:2)
最后我找到了解决方案,这就是它的工作原理:
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"address contains[cd] %@", searchText];
NSPredicate *predicateSSID = [NSPredicate predicateWithFormat:@"approved contains[cd] %@", searchText];
NSPredicate *predicatebusiness = [NSPredicate predicateWithFormat:@"businessName contains[cd] %@", searchText];
NSPredicate *predicateCity = [NSPredicate predicateWithFormat:@"city contains[cd] %@", searchText];
NSPredicate *predicatecountry = [NSPredicate predicateWithFormat:@"country contains[cd] %@", searchText];
NSPredicate *predicatedealerNo = [NSPredicate predicateWithFormat:@"dealerNo contains[cd] %@", searchText];
NSPredicate *predicatedealerId = [NSPredicate predicateWithFormat:@"dealerId contains[cd] %@", searchText];
NSPredicate *predicateemail = [NSPredicate predicateWithFormat:@"email contains[cd] %@", searchText];
NSPredicate *predicatefax = [NSPredicate predicateWithFormat:@"fax contains[cd] %@", searchText];
NSPredicate *predicatephone = [NSPredicate predicateWithFormat:@"phone contains[cd] %@", searchText];
NSPredicate *predicatepublished = [NSPredicate predicateWithFormat:@"published contains[cd] %@", searchText];
NSPredicate *predicateregionNum = [NSPredicate predicateWithFormat:@"regionNum contains[cd] %@", searchText];
NSPredicate *predicatestate = [NSPredicate predicateWithFormat:@"state contains[cd] %@", searchText];
NSPredicate *predicatewebsite = [NSPredicate predicateWithFormat:@"website contains[cd] %@", searchText];
NSPredicate *predicatezip = [NSPredicate predicateWithFormat:@"zip contains[cd] %@", searchText];
NSArray *subPredicates = [NSArray arrayWithObjects:predicateName, predicateSSID,predicatebusiness,predicateCity,predicatecountry,predicatedealerNo, predicatedealerId, predicateemail,predicatefax,predicatephone, predicatepublished, predicateregionNum,predicatestate,predicatewebsite,predicatezip, nil];
NSPredicate *orPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:subPredicates];
searchResults = [cellData filteredArrayUsingPredicate:orPredicate];
}
这里首先为每个值创建NSPredicate,然后是它的数组,然后使用NSCompoundPredicate创建NSPredicate数组,然后我得到了我的过滤数组。这是一个有点复杂的结构。感谢所有试过的人。
答案 1 :(得分:1)
试试这个:
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@", searchText];
NSArray *searchResults = [cellData filteredArrayUsingPredicate:resultPredicate];
NSLog(@"Result = %@",searchResults);
}
对于多个字符串,请使用此行
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(address contains[c] %@) || (approved contains[c] %@) || (businessName contains[c] %@) || (city contains[c] %@) || (country contains[c] %@) || (dealerNo contains[c] %@) || (dealerId contains[c] %@) || (email contains[c] %@) || (fax contains[c] %@) || (phone contains[c] %@) || (published contains[c] %@) || (regionNum contains[c] %@) || (state contains[c] %@) || (website contains[c] %@) || (zip contains[c] %@) || (businessName contains[c] %@) || (businessName contains[c] %@) || (businessName contains[c] %@)", searchText];
答案 2 :(得分:1)
-(void)searchBar:(UISearchBar *)searchBar1 textDidChange:(NSString *)searchText
{
if ([searchText length]==0)
{
temp_array1 =[array_Main1 mutableCopy];
temp_array2 =[array_Main2 mutableCopy];
temp_array3 =[array_Main3 mutableCopy];
}
else
{
[temp_array1 removeAllObjects];
[temp_array2 removeAllObjects];
[temp_array3 removeAllObjects];
int g = 0;
for (int i=0; i< array_Main1.count;i++)
{
NSRange Range1 = [[array_Main1 objectAtIndex:i] rangeOfString:searchText options:NSCaseInsensitiveSearch];
NSRange Range2 = [[array_Main2 objectAtIndex:i] rangeOfString:searchText options:NSCaseInsensitiveSearch];
NSRange Range3 = [[array_Main3 objectAtIndex:i] rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (Range1.location != NSNotFound || Range2.location != NSNotFound || Range3.location != NSNotFound )
{
[temp_array1 addObject:[array_Main1 objectAtIndex:g]];
[temp_array2 addObject:[array_Main2 objectAtIndex:g]];
[temp_array3 addObject:[array_Main3 objectAtIndex:g]];
}
g++;
}
}
[table reloadData];
}