如何在ios中搜索数组中的多个字符串?

时间:2014-04-08 12:11:09

标签: ios objective-c

我想搜索用户输入的字符串以检入多个字符串。 我尝试过使用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 
}

提前致谢。

3 个答案:

答案 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];
}