在我的项目中,我以
的形式获得响应数据{
"procedures": [5950]
0: {
"Procedures": {
"id": "1"
"procedure_name": "3d render w/o postprocess"
"procedure_code": "76376"
}
}
1: {
"Procedures": {
"id": "2"
"procedure_name": "3d rendering w/postprocess"
"procedure_code": "76377"
}
数据数组中有5950个元素。我为" id"创建了单独的数组。和" Procedure_name"并在UITableView
中显示数据,它显示带有id的正确数据。
我还应用搜索功能来过滤数据,因为通过滚动很难找到5950元素中的任何元素。
搜索功能也很有效但是当我选择过滤结果的任何UITableViewCell
时,它不提供该元素的实际ID,而它返回indexpath
的当前UITableView
值}。
搜索我把以下代码
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
tempArray = [NSArray arrayWithArray:dataArray];
NSString *stringToSearch = textField.text;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[c] %@",stringToSearch]; // if you need case sensitive search avoid '[c]' in the predicate
NSArray *tempresults = [dataArray filteredArrayUsingPredicate:predicate];
if (tempresults.count > 0)
{
tempArray = [NSArray arrayWithArray:tempresults];
}
[searchdiagtable reloadData];
return YES;
}
在DidSelectRow方法中的我应用以下代码
if (tableView == searchdiagtable)
{
UITableViewCell *selectedCell = [searchdiagtable cellForRowAtIndexPath:indexPath];
NSLog(@"%@", selectedCell.textLabel.text);
searchdiag. text = selectedCell.textLabel.text;
searchResultId = [iddict objectAtIndex:indexPath.row]; // iddict is the array where i store the values of "id" from dictionary.
[searchdiagtable deselectRowAtIndexPath:indexPath animated:YES];
searchdiagtable.hidden = YES;
}
答案 0 :(得分:1)
searchResultId = [iddict objectAtIndex:indexPath.row];
这行代码会产生问题,tableView
会重复使用单元格。
如果您选择了单元格,它会选择单元格索引(0,1,2 ......等)。所以你的数组返回第一个值。
如果您没有在表格视图中显示“Id”。您无法从阵列中获得正确的ID。
有一个解决方案,将id和name保存在一个字典中,
like:{
"id":"name"
}
使用名称可以从字典中获取id。
答案 1 :(得分:1)
检查您的问题我可以获得的问题必须是使用错误的数组iddict
进行搜索,因为它看起来应该是tempArray
答案 2 :(得分:1)
嘿,你已经得到了两个数组,一个用于ID,一个用于名称。
你是怎么做到的......之后你可能会做出这样的反应
NSMutableArray *id;
NSMutableArray *name;
for( ------ ){
[id addObject:[dict objectforkey:@"id"];
[name addObjec:[dict objectForKey:@"procedure_name"];
}
dict是reponse字典。 这就是你为字典
获取arrays.now的方法NSMutableDictionary *dict1 = [[NSMutableDictionary alloc]init];
for(){
[dict setObject:[dict objectforkey:@"id"] forKey:[dict objectForKey:@"procedure_name"];
}
只需在代码中仔细检查for循环..
答案 3 :(得分:0)
我只是轻松地创建A:B类字典 我正在分享我使用的代码并且对我来说非常有效
NSDictionary * searchdict = [NSDictionary dictionaryWithObjects:dataArray forKeys:iddict];
NSLog(@"dict formed by combining %@",searchdict);
其中dataarray和iddict是两个数组
它将输出字典作为
1034 = "Catheterize for urine spec";
1035 = "Cauterization of cervix";
1036 = "CBC without platelet";
1037 = "CBC/diffwbc w/o platelet";
1038 = "Cbt 1st hour";
1039 = "Cbt each addl hour";
104 = "Amino acids quan 6 or more";
1040 = "Ccp antibody"; ......
答案 4 :(得分:0)
yaa,我知道我们可以直接将两个数组添加到字典中。但是它需要两个数组和字典的内存..所以不要创建两个数组。你可以直接将它添加到字典中。但你所做的也是正确的。在移动应用程序中,每次我们都要考虑内存管理..