2013-12-12 5 views
0

검색 바를 구현하려고하지만 몇 가지 문제가 있습니다. 내 Tableview의 데이터는 PLIST에서 제공되며 NSMutableArray에 채워집니다. 내 PLIST는 이와 같이 보이며 NSLOG로 배열의 데이터를 볼 수도 있습니다. 이제 tableview에 검색 기능을 제공하여 "name"을 검색 할 수 있고 입력 한 이름에 맞는 모든 항목을 검색 할 수 있습니다. 하지만 내 검색이 모든 "이름"항목을 검색 할 수있게하려면 어떻게해야합니까?사전에서 배열로 검색 막대

업데이트 : 검색 필드에 입력을 시작하면 배열이 비어 있습니다.

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 
    NSPredicate *resultPredicate = [NSPredicate 
            predicateWithFormat:@"name contains[c] %@", 
            searchText]; 

    NSMutableArray *filtered = [myArray filteredArrayUsingPredicate:resultPredicate]; 

    NSLog(@"%@", filtered); 
} 

#pragma mark - UISearchDisplayController delegate methods 
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchString:(NSString *)searchString 
{ 
    [self filterContentForSearchText:searchString 
           scope:[[self.searchDisplayController.searchBar scopeButtonTitles] 
             objectAtIndex:[self.searchDisplayController.searchBar 
                selectedScopeButtonIndex]]]; 

    return YES; 
} 

나는 이런 식으로 내있는 tableview에 데이터를 채 웁니다

cell.textLabel.text = [[[[myArray objectAtIndex:indexPath.section]objectForKey:@"Rows"]objectAtIndex:indexPath.row]objectForKey:@"name"]; 

상관 없음 PLIST는 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Hot Drinks</key> 
    <array> 
     <dict> 
      <key>title</key> 
      <string>COFFEE SPECIALS</string> 
      <key>Rows</key> 
      <array> 
       <dict> 
        <key>price</key> 
        <string>3,20 Euro</string> 
        <key>name</key> 
        <string>Espresso</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string></string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>3,20 euro</string> 
        <key>name</key> 
        <string>Ristretto</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>Short &amp; strong espresso</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>3,50 Euro</string> 
        <key>name</key> 
        <string>Espresso Macchiato</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>Espresso with hot milk </string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>4,80 Euro</string> 
        <key>name</key> 
        <string>Espresso Doppio</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>Double espresso</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>3,50 Euro</string> 
        <key>name</key> 
        <string>Coffee</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>Freshly brewed regular coffee</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>4,00 Euro</string> 
        <key>name</key> 
        <string>Cappuccino</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>Espresso with hot milk and milk froth</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>4,50 Euro</string> 
        <key>name</key> 
        <string>White Coffee</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>coffee with a lot of hot milk and milk froth</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>4,50 Euro</string> 
        <key>name</key> 
        <string>Latte Macchiato</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>Espresso with a lot of hot milk and milk froth, served in a glass</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>0,50 Euro</string> 
        <key>name</key> 
        <string>Flavours of your choice</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>Chocolate, caramel, white chocolate, hazelnut </string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>6,50 Euro</string> 
        <key>name</key> 
        <string>Hot “Valrhona” chocolate</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>Hot “Valrhona” chocolate prepared with milk and cream </string> 
       </dict> 
      </array> 
     </dict> 
     <dict> 
      <key>title</key> 
      <string>TEA SPECIALTIES</string> 
      <key>Rows</key> 
      <array> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>English Breakfast – Ceylon/St. James</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>BLACK TEA</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Darjeeling Summer Gold</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>BLACK TEA</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Classic Chai – Indien</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>BLACK TEA</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Assam Barie</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>BLACK TEA</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Earl Grey (Darjeeling)</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>FLAVOURED BLACK TEA</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Dung Ti Oolong – China</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>OOLONG TEA</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Green Dragon</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>GREEN TEA</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Grüner Tee Morgentau</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>FLAVOURED GREEN TEA</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Jasmin Gold</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>FLAVOURED GREEN TEA</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Pai Mu Tan Silver Typ</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>WHITE TEA</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Get the Power</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>FLAVOURED FRUIT INFUSION</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Red Fruit</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>FLAVOURED FRUIT INFUSION</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Herbs and Ginger</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>HERBAL INFUSION</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Original Roibosh</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>HERBAL INFUSION</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Verbena</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>HERBAL INFUSION</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Fruity Camomile</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>HERBAL INFUSION</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Mint &amp; Fresh</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>HERBAL INFUSION</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Equilibrium</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>FLAVOURED HERBAL INFUSION</string> 
       </dict> 
       <dict> 
        <key>price</key> 
        <string>5,00 Euro</string> 
        <key>name</key> 
        <string>Fruits of Paradise</string> 
        <key>link</key> 
        <string></string> 
        <key>subname</key> 
        <string>FLAVOURED HERBAL INFUSION</string> 
       </dict> 
      </array> 
     </dict> 
    </array> 
</dict> 
</plist> 

답변

0

NSPredicate을 사용할 수 있습니다.

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"name contains[c] %@", stringFromSearchField]; 

을 그리고 당신은 다음과 같은 방법으로 배열을 필터링 얻을 수 있습니다 :

나는 다음과 같은 제안

NSMutableArray *rows = [NSMutableArray array]; 
for(NSDictionary *dict in myArray) 
{ 
    NSArray *tempRows = dict[@"Rows"]; 
    if([tempRows isKindOfClass: [NSArray class]] && tempRows.count) 
    { 
     [rows addObjectsFromArray:tempRows]; 
    } 
} 
NSArray *filteredArray = [rows filteredArrayUsingPredicate: predicate]; 
+0

것은 위의 내 업데이 트를 참조하십시오. 내 배열은 비어 있습니다. – halloway4b

+0

답변을 업데이트했습니다. –

+0

아주 잘 작동합니다. 많은 감사합니다. 결과가 올바르게 표시됩니다. 검색 결과에 셀의 detailtext도 표시 할 수 있습니까? 이 방법을 사용하여 하위 이름의 이름을 표시합니다. if (tableView == self.searchDisplayController.searchResultsTableView) { cell.textLabel.text = [[filtersArray objectAtIndex : indexPath.row] objectForKey : @ "name"] ; cell.detailTextLabel.text = [[filteredArray objectAtIndex : indexPath.row] objectForKey : @ "subname"]; NSLog (@ "% @", [[필터링 된 objectAtIndex : indexPath.row] objectForKey : @ "하위 이름"]); } – halloway4b