我有一个包含字典的数组,我必须在这个数组上实现搜索功能,并让它只显示搜索栏中输入的文本............... .........
我试过这段代码
-(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;
},
答案 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];
}