IOS:获得" id"的价值通过表格视图选择项目

时间:2016-02-08 09:38:59

标签: ios objective-c iphone uitableview

在我的项目中,我以

的形式获得响应数据
{
  "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;
    }

5 个答案:

答案 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,我知道我们可以直接将两个数组添加到字典中。但是它需要两个数组和字典的内存..所以不要创建两个数组。你可以直接将它添加到字典中。但你所做的也是正确的。在移动应用程序中,每次我们都要考虑内存管理..