gpt4 book ai didi

ios - NSDictionary 搜索问题

转载 作者:行者123 更新时间:2023-11-28 22:24:53 26 4
gpt4 key购买 nike

我有一个 plist(一个字典的数组),我正在读入一个 NSArray,我用它来填充一个表。它是人员及其工作地点、电话号码等的列表。我添加了一个 UISearchBar 并实现了 textDidChange 方法。

当我按此人的姓氏进行搜索时,我确实在表格中看到了过滤后的列表,但我认为我没有正确存储过滤后的结果。我正在使用 NSMutable 数组,但我丢失了键:值对。

有人可以指出我正确的方向吗?我最终想单击过滤后的名称并推送到详细 View Controller 。我相信我的问题是我试图在 NSMutableArray 中捕获过滤后的结果,但我不确定。

我已经进行了很多谷歌搜索,但似乎无法将其放在一起。任何帮助表示赞赏。

亲切的问候,达林

这是我用来加载 plist 的数组。

-(NSArray *)content
{
if (!content){ {
content = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"ophonebook" ofType:@"plist"]];
NSSortDescriptor* nameSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Last" ascending:YES];
content= [content sortedArrayUsingDescriptors:[NSArray arrayWithObject:nameSortDescriptor]];
}
return content;
}

这是 UISearchBar 方法

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if (searchText.length == 0)
{
isFiltered= NO;
} else {
isFiltered= YES;
filteredPeople = [[NSMutableArray alloc]init];

for (NSDictionary *dict in content)
{
NSString *last = [dict objectForKey:@"Last"];
NSRange lastRange = [last rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (lastRange.location != NSNotFound)
{
[filteredPeople addObject: [dict objectForKey:@"Last"]];
}
}
}
[myTableView reloadData];
}

最佳答案

保持简单,摆脱表委托(delegate)方法中的标志和不同的数组。相反,有 1 个数组用于您的源数据 (content) 和另一个数组用于实际用于显示的源数据(称为 displayContent)。

现在,当您启动时,设置 displayContent = content

然后,当您想要过滤时,设置 displayContent = [content filteredArrayUsingPredicate:...];(您可以将当前循环转换为简单的谓词)。

最后,当您完成搜索时,设置 displayContent = content

没有旗帜。表委托(delegate)方法中没有 if。简单易读的代码。

附注你的问题是:

[filteredPeople addObject: [dict objectForKey:@"Last"]];

你应该设置为:

[filteredPeople addObject:dict];

因此您拥有所有数据而不仅仅是名称。尽管从技术上讲,您仍然可以通过在您的 content 中搜索姓氏来使其工作。

关于ios - NSDictionary 搜索问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19233698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com