包含NSDictionary的数组上的快速枚举循环

时间:2013-05-02 09:52:24

标签: ios uisearchdisplaycontroller

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

我试过这段代码

-(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;
 },

1 个答案:

答案 0 :(得分:1)

据我所知,你有一个存储在parseData数组中的字典数组。您希望形成一个与值FolderName匹配的subArray与searchText。

您可以使用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];
}