【问题标题】:Searching Dictionary Values & Keys & Displaying in UITableView issues在 UITableView 问题中搜索字典值 & 键 & 显示
【发布时间】:2015-01-11 03:43:35
【问题描述】:

我正在尝试更新我的搜索显示控制器,但现在,我已将其设置为:

 NSString *path = [[NSBundle mainBundle] pathForResource:@"Documents"
                                                 ofType:@"plist"];

searchDict = [NSDictionary dictionaryWithContentsOfFile:path];
allsearchDictKeys = [searchDict allKeys];

我用 NSPredicate 搜索它

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    searchResults = [[NSMutableArray alloc] init];
    [searchDict enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *obj, BOOL *stop) {
    if ([key isEqualToString:searchText] || [obj isEqualToString:searchText] ) {
        [searchResults addObject:key];
        NSLog(@"search is %@", searchResults);
    }}];
}

-(BOOL)searchDisplayController:(UISearchController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString
                           scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                                  objectAtIndex:[self.searchDisplayController.searchBar
                                                 selectedScopeButtonIndex]]];
return YES;
}

并在表格视图中显示结果,如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 static NSString *defaultIdentifier = @"Cell";
 UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:defaultIdentifier];
 if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:defaultIdentifier];
}

cell.textLabel.text = [searchResults objectAtIndex:indexPath.row];
cell.detailTextLabel.text = [searchDict valueForKey:cell.textLabel.text];

return cell;
}

我希望能够同时搜索值 键,所以我实现了这个:

allsearchDictValues = [searchDict allValues];

//Trying to search complete plist where searchArray is NSMutableArray
searchArray = [[NSMutableArray alloc] init];
[searchArray addObjectsFromArray:allsearchDictKeys];
[searchArray addObjectsFromArray:allsearchDictValues];

然后这样搜索:

 NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", searchText];
searchResults = [[searchArray filteredArrayUsingPredicate:resultPredicate] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

但随后表格视图 cell.textLabel 只显示值,而在 detailTextLabel 中没有任何内容。那么如何搜索字典的值和键,但保持单元格格式相同,其中键是 cell.textLabel,值是 cell.detailTextLabel

【问题讨论】:

  • 搜索方式与您选择显示值的方式无关。

标签: ios nsdictionary uisearchdisplaycontroller


【解决方案1】:

NSDictionary 允许您枚举它包含的键和值。你可以考虑这样的事情:

NSMutableArray *searchResults = [NSMutableArray alloc] init];
- (void)enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *obj, BOOL *stop) {
    if ([key isEqualToString:searchText] || [obj isEqualToString:searchText] ) {
        [searchResults addObject:key];
}

现在您的搜索结果包含字典的键,其中键或对象与您的搜索字符串匹配。

【讨论】:

  • 对不起。看来 Hot Licks 是有道理的。这不是我遇到问题的搜索,事实上,当我只是搜索键时它工作得很好,它正在适当地显示它。作为一个新手,我想将方法​​保留在 shouldReload 中。我已经编辑了我的问题。也许你能帮忙?
  • 这是一种一次性在字典中搜索键和值的方法。如果您只寻找一项,这可以让您通过在块中设置*stop = YES 来停止进一步的枚举。
  • 好的,谢谢。我把这个放在哪里?我收到“预期方法”正文错误
  • 你在你想生成searchResults的地方使用它。
  • 谢谢。想通了
猜你喜欢
  • 2015-09-29
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 2016-09-21
相关资源
最近更新 更多