【问题标题】:iOS: Creating structured NSArray in given formatiOS:以给定格式创建结构化 NSArray
【发布时间】:2017-12-15 06:58:23
【问题描述】:

大家好,我正在做一个项目,我必须以这种格式创建一个数组:

{
            "1": {
                "Child_Gender": "",
                "Child_DOB": "",
                "Child_tobbacoUse": ""
            },
            "2": {
                "Child_Gender": "",
                "Child_DOB": "",
                "Child_tobbacoUse": ""
            },

但我创建的数组给出了这种格式

(
        {
        "Child_DOB" = "";
        "Child_Gender" = "";
        "Child_tobbacoUse" = "";
    },
        {
        "Child_DOB" = "";
        "Child_Gender" = "";
        "Child_tobbacoUse" = "";
    }
)

我正在使用以下代码:

for (int i = 0; i < arrayChildModel.count; i++)
    {
        ChildModel *model = [arrayChildModel objectAtIndex:i];
        NSString *keyOrder = [NSString stringWithFormat:@"Children_Gender[%d]",i];
        NSString *keyQuantity = [NSString stringWithFormat:@"Children_BirthDate[%d]",i];
        NSString *keyTobacco = [NSString stringWithFormat:@"Children_HasTobaccoUsage[%d]",i];

        //NSString *keyNotes = [NSString stringWithFormat:@"row[%d][description]",i];
        childDateOfBirthStr = model.ChildBirthDate ;
        childGenderStr = model.ChildGender ;
        childTobaccoStr = model.ChildTobaccoUsage;


            NSString *string1 = [NSString stringWithFormat:@"%@=%@&",keyOrder,childGenderStr];
            NSString *string2 = [NSString stringWithFormat:@"%@=%@",keyQuantity,childDateOfBirthStr];
            NSString *string3 = [NSString stringWithFormat:@"%@=%@",keyTobacco,childTobaccoStr];
            [stringParams appendString:string1];
            [stringParams appendString:string2];
            [stringParams appendString:string3];


            NSDictionary * ChildDict;
            NSArray * ApplicantKeys = [[NSArray alloc]initWithObjects:@"Child_Gender",@"Child_DOB",@"Child_tobbacoUse", nil];
            NSArray * ApplicantObjects = [[NSArray alloc]initWithObjects:childGenderStr,childDateOfBirthStr,childTobaccoStr, nil];
            ChildDict = [NSDictionary dictionaryWithObjects:ApplicantObjects forKeys:ApplicantKeys];
            NSLog(@"Dictionary is %@",ChildDict);
            [CompleteArray addObject:ChildDict];

    }
    NSLog(@"Final Array is %@",CompleteArray);

请帮我将输出数组转换为所需的格式化数组

【问题讨论】:

  • 它的字典不是数组,试着像字典创建者一样思考。

标签: ios objective-c nsarray nsdictionary


【解决方案1】:

在for循环外创建一个字典

 NSMutableDictionary *dict =[[NSMutableDictionary alloc]init];

NSLog(@"Dictionary is %@",ChildDict);之前添加这一行

 [dict setObject:ChildDict forKey:[NSString stringWithFormat:@"%ld",i+1]];
[CompleteArray addObject:dict];

【讨论】:

  • 它显示了这个错误 [<__nsdictionary0> setValue:forUndefinedKey:]: 这个类不符合键 1 的键值编码。
  • NSDictionary 是不可变的,请改用 NSMutableDictionary。
  • 你需要创建 NSMutableDictionary
【解决方案2】:

请检查以下解决方案,它将为您提供预期的输出。

     NSMutableDictionary *resultDic = [NSMutableDictionary new];
    for (int i = 0; i < arrayChildModel.count; i++)
    {


            ChildModel *model = [arrayChildModel objectAtIndex:i];
            NSString *keyOrder = [NSString stringWithFormat:@"Children_Gender[%d]",i];
            NSString *keyQuantity = [NSString stringWithFormat:@"Children_BirthDate[%d]",i];
            NSString *keyTobacco = [NSString stringWithFormat:@"Children_HasTobaccoUsage[%d]",i];

            //NSString *keyNotes = [NSString stringWithFormat:@"row[%d][description]",i];
            childDateOfBirthStr = model.ChildBirthDate ;
            childGenderStr = model.ChildGender ;
            childTobaccoStr = model.ChildTobaccoUsage;


            NSString *string1 = [NSString stringWithFormat:@"%@=%@&",keyOrder,childGenderStr];
            NSString *string2 = [NSString stringWithFormat:@"%@=%@",keyQuantity,childDateOfBirthStr];
            NSString *string3 = [NSString stringWithFormat:@"%@=%@",keyTobacco,childTobaccoStr];
            [stringParams appendString:string1];
            [stringParams appendString:string2];
            [stringParams appendString:string3];


            NSDictionary * ChildDict = [NSDictionary dictionaryWithObjectsAndKeys:childGenderStr,@"Child_Gender",childDateOfBirthStr,@"Child_DOB",childTobaccoStr,@"Child_tobbacoUse", nil];
            NSLog(@"Dictionary is %@",ChildDict);

            NSString *resultDicKey = [NSString stringWithFormat:@"%d",i+1];
            [resultDic setValue:ChildDict forKey:resultDicKey];

    }

    NSLog(@"Result dic %@",resultDic);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 2013-09-05
    相关资源
    最近更新 更多