过滤/搜索NSMutableDictionary

时间:2014-03-22 20:35:58

标签: ios objective-c uisearchbar nspredicate nsmutabledictionary

我有一个NSMutableDictionary(PerosnsListSections)和一个类名Persons

的NSMutableDictionary:

  • 键是“a,b,m ......”之类的字母。
  • 值为NSMutableArray               - > NSMutableArray具有类Persons
  • 的对象

人员类: @property(assign,nonatomic)NSInteger pid; @property(强,非原子)NSString * name;

现在我在UITableView中显示了PerosnsListSections,如图所示

enter image description here

我想要实现的是当搜索栏中的用户类型首先我必须过滤第一个字母的部分然后过滤该部分下的名称。

抱歉我的英语不好(:

1 个答案:

答案 0 :(得分:1)

您可以先执行以下操作在字典中选择正确的数组:

NSString *firstLetter = [searchString substringWithRange:(NSRange){0,1}];
NSArray *people = PersonsListSection[firstLetter];

然后,您可以使用NSPredicates

过滤掉这些人
NSPredicate *namesBeginningWithKeyword = [NSPredicate predicateWithFormat:@"(name     BEGINSWITH[cd] $letter)"];
NSArray *filteredPeople = [people filteredArrayUsingPredicate:[namesBeginningWithKeyword predicateWithSubstitutionVariables:@{@"letter": searchString}]]);

你如何将这一点反映在tableview的内容中的问题是另一个问题。

  1. 通常,您希望您的视图控制器成为UISearchBar的委托,并使用– (void)searchBar:textDidChange:委托方法对更改作出反应。
  2. 您可以调用tableview的- reloadData方法,以便尝试重新计算其内容,调用其所有的dataSource方法,如- numberOfSectionsInTableView:等。
  3. 反过来,在这些方法中,您要检查是否在搜索栏中输入了某些文字,并使用上述提示返回正确的部分/单元格。