for循环中的键的NSDictonary设置值仅获取最后一个值

时间:2015-05-12 06:15:04

标签: ios objective-c iphone ipad

我想将参数传递给服务器,参数在一个数组中 参数1(2,3,5,7,9,16,25)我想通过

@"tags[]" : @"2"
@"tags[]" : @"4"

.........

 NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setObject: userId forKey:@"user_id"];
[parameters setObject: userToken forKey:@"token"];
for (i = 0 ; i < parameters1.count   ; i++) {

 [parameters setObject:[parameters1 objectAtIndex:i]forKey:@"tags[]"];

}

我的输出为

 @"user_id" : 2

  @"token" : khsskjkjwllwklkllk

  @"tags[]" : 25

这里我想传递所有标签,但我只获得最后一个价值

我想从参数Dictonary中添加标签。

4 个答案:

答案 0 :(得分:0)

字典只能包含每个键一个值,所以:

[parameters setObject:[parameters1 objectAtIndex:i]forKey:@"tags[]"];

始终将parameters1[i]设置为@"tags[]"的<字符串)值。

也许您打算使用数组作为该键的值?我不能说,但如果是这样的话:

NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
parameters[@"user_id"] = userId;
parameters[@"token"] = userToken;
parameters[@"tags[]"] = parameters1;

答案 1 :(得分:0)

您可以直接为“tag []”添加参数数组1。

答案 2 :(得分:0)

我刚编辑了你的代码,

NSMutableArray *parameters1 = [[NSMutableArray alloc] initWithObjects:@"2",@"3",@"5",@"7",@"9",@"16",@"25", nil];
NSMutableDictionary *parameters= [NSMutableDictionary dictionary];
NSMutableDictionary *parameters2 = [NSMutableDictionary dictionary];
for (int i = 0 ; i < parameters1.count   ; i++) {
    NSMutableDictionary *parametersTag = [NSMutableDictionary dictionary];
    [parametersTag setObject:[parameters1 objectAtIndex:i]forKey:@"tags[]"];
    [parameters1 replaceObjectAtIndex:i withObject:parametersTag];
}
[parameters setObject: @"111" forKey:@"user_id"];
[parameters1 addObject:parameters];
[parameters2 setObject: @"dhfjkhds" forKey:@"token"];
[parameters1 addObject:parameters2];

NSLog(@"arr : %@",parameters1);

它将生成如下输出,

(
    {
    "tags[]" = 2;
},
    {
    "tags[]" = 3;
},
    {
    "tags[]" = 5;
},
    {
    "tags[]" = 7;
},
    {
    "tags[]" = 9;
},
    {
    "tags[]" = 16;
},
    {
    "tags[]" = 25;
},
    {
    "user_id" = 111;
},
    {
    token = dhfjkhds;
}

答案 3 :(得分:0)

由于NSDictionary每个键只能包含一个值,因此您必须将键与任何额外的数字或字符区分开来。

这里使用的是可以保存最后设定值的关键标签[]。

我已经通过一个小的更改来更新您的代码,这些更改可以更改您的密钥并保留每个值

NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setObject: userId forKey:@"user_id"];
[parameters setObject: userToken forKey:@"token"];
for (i = 0 ; i < parameters1.count   ; i++) {
    [parameters setObject:[parameters1 objectAtIndex:i] forKey:[NSString stringWithFormat@"tags[%d]",i]];
}

您的输出将为

@"user_id" : 2
@"token" : khsskjkjwllwklkllk
@"tags[0]" : 2
@"tags[1]" : 3
@"tags[2]" : 5
@"tags[3]" : 7
@"tags[4]" : 9
@"tags[5]" : 16
@"tags[6]" : 25

我希望你理解答案。