私のアプリでは、3つNSMutableArray
のs、つまりempJsonArray
searchArray
とnameArray
empJsonArray
JSON を使用して入力されます。
nameArray
にはvalueForKey:@"Name"
fromが取り込まれempJsonArray
、searchArray
最初は の内容が取り込まれempJsonArray
ます。
データはUITableView
今、私はUISearchBar
自分を検索してUITableView
関連データを表示するために使用しています。UISearchBar
正常に動作していますが、検索データが表示されるときに問題が発生します。「T」を検索すると、文字「T」を含む名前が 2 つあるとしますUITableView
。2 つの項目が表示されますが、「T」を含む項目ではなく、先頭nameArray
(つまり、インデックス 0 と 1) が形成されます。
も使用してNSSortDescriptor
います。
コードは次のとおりです。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MYCell"];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MYCell"];
}
sorter = [[NSSortDescriptor alloc]initWithKey:@"Name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
sortedArray = [self.empJsonArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sorter]];
cell.textLabel.text = [[sortedArray objectAtIndex:indexPath.row]objectForKey:@"Name"];
nameArray = [[NSMutableArray alloc]initWithArray:[sortedArray valueForKey:@"Name"]];
return cell;
}
検索方法:
- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText {
if ([searchText length]==0) {
[searchArray removeAllObjects];
[searchArray addObjectsFromArray:nameArray];
}
else {
[searchArray removeAllObjects];
for (NSString *string in nameArray) {
NSRange r = [string rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (r.location != NSNotFound) {
[searchArray addObject:string];
}
}
}
[empTable reloadData];
}