iOS:如何在一个数组中的多个字典中分隔键值?

Posted

技术标签:

【中文标题】iOS:如何在一个数组中的多个字典中分隔键值?【英文标题】:iOS: How to separate key values in multiple dictionary which is in one array? 【发布时间】:2016-12-12 07:22:32 【问题描述】:

我有NSDictionary这样的:

(
    
    bp = "158/56";
    dateTime = "05/12/2016 11:51:12 AM";
    doc =         
        "email_id" = "gkalal64@gmail.com";
        exception = 0;
        gender = Male;
        id = 0;
        "mobile_no" = 8149910113;
        name = Kabadia;
        "profile_id" = 0;
        qualification = MBBS;
        "reg_id" = 100;
        salutation = Mr;
        "wellness_id" = IN8S2D29A2;
    ;
    "follow_up" = 14;
    id = 6;
    medicine =         (
        "Injection,Crocin,5,0-1-0,After Meal,2",
        "Powder,churan,10,1-0-0,Before Meal,14",
        no,
        no,
        no,
        no,
        no,
        no,
        no,
        no
    );
    patient =         
        "email_id" = "bishtrohit1989@gmail.com";
        exception = 0;
        gender = Male;
        id = 0;
        "mobile_no" = 8624088776;
        name = kamlesh;
        "profile_id" = 0;
        qualification = "";
        "reg_id" = 101;
        salutation = Mr;
        "wellness_id" = IND16HRR65;
    ;
    weight = 47;

)

我想以如下方式显示以上信息: 但我不知道该怎么做。我搜索了这个,但我不知道该怎么做。

我做了什么:

在以前的视图控制器中,我显示了多个处方标题。点击特定单元格后,我调用了这个视图,我得到了服务器的上述响应,我想像上图一样显示。

为此,我在屏幕上拍摄了UITableView

我为此使用了 1 个静态自定义单元格。

但我不知道该怎么做。

请任何人都可以解决我的问题。帮助将是可观的。

【问题讨论】:

必须为这个屏幕使用 TableView 吗? 是的,我做到了。但我不知道如何显示其中的所有内容。请帮我解决这个问题...@PiyushRathi 这只是一个简单的for循环。 您能否详细说明一下,您的帮助将不胜感激@ElTomato 您是在此屏幕上显示一个处方还是多个? 【参考方案1】:

根据您的数据结构,我猜您的数据是一种单一对象,因此很明显它不是同种对象的集合(数组),因此我建议您为整个单一记录只创建一个自定义单元格。

在这种情况下,您的 TableView 将只有一行。

在自定义单元格中:我们称之为“PatientDetail”

添加您要为每个标签和控件显示的所有标签和控件 财产和连接插座任何需要。 如果您使用的是自动布局,则为所有控件提供相对约束,否则通过计算其内容的高度来动态设置每个控件的框架。

它将如何运作?

正如你所说的特定列表的详细信息屏幕,所以我们将在 tableview 中显示单行,其中包含所有详细信息。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    return 1;

在下面的代码中

responseDict NSDictionary 这是响应的第一个对象,因为您的响应是一种数组。

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


    PatientDetail *cell=[tableView dequeueReusableCellWithIdentifier:@"PatientDetail" forIndexPath:indexPath];

    //Setting
    [cell.lbDateTime setText:[responseDict valueForKey:@"dateTime"]];
    //Doctor name Just
    [cell.lbDoctorName setText:[[responseDict objectForKey:@"doc"]valueForKey:@"name"]];

    //Follow the above steps for all the details



    return cell;

【讨论】:

我将我的响应存储为 _arr=[NSArray arrayWithArray:ResponseArray];然后在 -(UITableViewCell *)tableview----- 方法中,我使用 NSDictionary *content = [_arr objectAtIndex:indexPath.row];但是当我打印内容时我得到了空值....有什么问题..@Mahesh @SurajSukale 你在听我的回答吗? 是的,你的回答没有问题,但我在内容中得到了空值。 好的。现在不要使用 indexPath.row,因为我们只有一条记录。所以使用NSDictionary *content = [_arr objectAtIndex:0]; 你必须从numberOfRowsInSection方法返回1。【参考方案2】:

更新答案

if (indexPath.row < responseArray.count)

   NSString *docName = @"";
   NSString *contact = @"";
   NSString *wellness_id = @"";
   if ([selectedDict valueForKey:@"doc"] != nil)

        NSDictionary *doctorDict = [selectedDict valueForKey:@"doc"];
        NSString *lDocName = [doctorDict valueForKey:@"name"];
        if(lDocName.length > 0)
            docName = lDocName;
        

        NSString *qulification = [doctorDict valueForKey:@"qualification"];
        if(qulification.length > 0)
            docName = [NSString stringWithFormat:@"%@ %@", docName, qulification];
        

        NSString *mobile_no = [doctorDict valueForKey:@"mobile_no"];
        if(mobile_no.length > 0)
            contact = mobile_no;
        

        NSString *email_id = [doctorDict valueForKey:@"email_id"];
        if(email_id.length > 0)
            contact = [NSString stringWithFormat:@"%@ / %@", contact, email_id];
        
        NSString *wellness_idTemp = [doctorDict valueForKey:@"wellness_id"];
        if(wellness_idTemp.length > 0)
            wellness_id= [NSString stringWithFormat:@"Wellness_Id : %@", wellness_idTemp];
        
  
  cell.docNameLabel.text = docName;
  cell.contact.text = contact;
  cell.wellnessID.text = wellness_id;

   NSString *patientName = @"";
   NSString *patientcontact = @"";
   NSString *patientWellness_id = @"";
   NSString *bloodPressure = [selectedDict valueForKey:@"bp"];
   NSString *weight = [selectedDict valueForKey:@"weight"];

  if ([selectedDict valueForKey:@"patient"] != nil)

        NSDictionary *patientDict = [selectedDict valueForKey:@"patient"];
        NSString *lName = [patientDict valueForKey:@"name"];
        if(lName.length > 0)
            patientName = lName;
        

        NSString *mobile_no = [patientDict valueForKey:@"mobile_no"];
        if(mobile_no.length > 0)
            patientcontact = mobile_no;
        

        NSString *email_id = [patientDict valueForKey:@"email_id"];
        if(email_id.length > 0)
            patientcontact = [NSString stringWithFormat:@"%@ / %@", contact, email_id];
        
        NSString *wellness_idTemp = [patientDict valueForKey:@"wellness_id"];
        if(wellness_idTemp.length > 0)
            patientWellness_id = [NSString stringWithFormat:@"Wellness Id : %@", wellness_idTemp];
        
   
    cell.patientNameLabel.text = patientName;
    cell.contact.text = patientcontact;
    cell.wellnessID.text = wellness_id;
    cell.bp.text = bloodPressure;
    cell.weight.text = weight;

希望这会有所帮助。

【讨论】:

点击查看处方后,我正在调用网络服务并得到上述响应 @SurajSukale 因此您可以从响应数组中获取索引 0 处的 dict 并如上所示在您的 tableview 中显示。 我将我的响应存储为 _arr=[NSArray arrayWithArray:ResponseArray];然后在 -(UITableViewCell *)tableview----- 方法中,我使用 NSDictionary *content = [_arr objectAtIndex:indexPath.row];但是我得到了空值,当我打印内容时......意味着在你的代码中,selecteddict 为空 @SurajSukale 你调试了吗? _arr 计数为 1?这是正确的 @SurajSukale 我认为错误是响应,只是不要在 numberOfRows 函数中提供静态计数 1,让通过 _arr 计数

以上是关于iOS:如何在一个数组中的多个字典中分隔键值?的主要内容,如果未能解决你的问题,请参考以下文章

如果它们共享任何键值对,如何合并来自不同列表的多个字典?

Python(10)--字典--深浅复制

如何根据键值组将字典拆分为多个字典?

如何解析字典中的数组内的字典

如何在ios中分隔数组

如何比较字典值中的多个数组,并将每个数组元素的字典键映射到新数组/列表中