0

我有一个包含字典的数组,我必须在这个数组上实现搜索功能,并让它只在搜索栏中显示键入的文本...... ……

我试过这段代码

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    if (searchText.length == 0) {
        isFiltered = NO;
    }
    else {
        isFiltered = YES;

    FilteredData = [[NSMutableArray alloc]initWithArray:[ParsedData valueForKey:@"FolderName"]];       
    NSMutableArray *searchData = [NSMutableArray new];
    for(NSDictionary *dict in ParsedData){

        NSDictionary *tempDict= @{@"FolderName":dict[@"FolderName"],@"ID":dict[@"ID"]}              
        [searchData addObject:tempDict];

        SearchData = [[NSMutableArray alloc]initWithArray:searchData];
        NSLog(@"DATA %@",SearchData);

    }

    //Fast Enumeration

    for (NSString *fileName in FilteredData)
    {
        NSRange fileNameRange = [fileName rangeOfString:searchText options:NSCaseInsensitiveSearch];

        if (fileNameRange.location == NSNotFound) {

            [SearchData removeObject:[SearchData valueForKey:@"FolderName"]];

        }
    }

}

[listingSet reloadData];
}




 This is the data present in parsed data as below plz check out.parse data array is    getting data from an xml


 2013-05-02 15:14:19.935 DocumentManagement[423:207] PARSED DATA (
    {
    CreatedBy = 1;
    FolderName = Posteingang;
    ID = 13000;
    ParentID = 0;
},
  {
    CreatedBy = 1;
    FolderName = "my folder";
    ID = 13183;
    ParentID = 0;
 },
4

1 回答 1

1

据我了解,您有一个字典数组存储在 parseData 数组中。您想形成一个与 searchText 匹配的值的子数组FolderName

您可以使用NSPredicate

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    if (searchText.length == 0) {
        isFiltered = NO;
    }
    else {
        isFiltered = YES;

        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FolderName LIKE [cd] %@",searchText];
        searchData = [[parsedData filteredArrayUsingPredicate:predicate]mutableCopy];
    }

    [listingSet reloadData];
}
于 2013-05-02T10:32:37.707 回答