NSMutableDictionary将多个对象添加到一个键

时间:2013-05-22 13:01:26

标签: objective-c nsmutabledictionary

如何在NSMutableDictionary中向同一个键添加多个对象? 我找不到合适的方法。 setObject方法仅更新密钥数组中的单个对象。 addObject: forkey:中的方法NSMutableDictionary不可用,并且在使用时会导致崩溃。

plist文件中读取字典。

词典:

temp = {
    nickname : score 
        item 0 = level1;
        item 1 = level2;
        item 3 = level3;
    score 
        item 0 = 400;
        item 1 = 400;
        item 3 = 400;
}

以下是代码:

NSMutableDictionary *newDict = [[NSMutableDictionary alloc] init];
str_nickname = [temp objectForKey:@"nickname"];
for (NSString *key in str_nickname){
    if ([key isEqualToString:@"level2"]) {  //replace object with new name
        [newDict setObject:@"new level" forKey:@"nickname"];
    } else {
        [newDict addObject:key forKey:@"nickname"];   //wont work!!!
    }
}

此外,我想更新新词典中的新分数,并且必须在相应的级别对象上更新,可能是通过索引?

2 个答案:

答案 0 :(得分:2)

如果你想在字典中的同一个键下存储多个对象,你唯一的机会就是将它们放入

  • 阵列
  • 其他字典
  • 设置
  • 您喜欢的任何收藏类型

并将其存储在您的字典中。 原因是,字典是键值配对。整个体系结构不支持与多个对象相对应的键。这些物体对于系统来说是不可媲美的,因此没有骰子。

编辑: 如果你想通过索引访问该对象,我猜你最好的选择是Array-Version。将可变数组存储在字典中以获取键“昵称”,然后将对象添加到该数组。 要存储:

[myDictionary setObject:[NSMutableArray array] ForKey:@"nickname"];
[[myDictionary objectForKey:@"nickname"] addObject:yourObject];

要检索:

[[myDictionary objectForKey:@"nickname"] objectAtIndex:index];

答案 1 :(得分:1)

如果您的plist文件是这样的" test.plist"

The Dictionary temp={
    nickname : Junaid Sidhu

    levels 
             item 0 = level1;
             item 1 = level2;
             item 3 = level3;
    score 
             item 0 = 400;
             item 1 = 400;
             item 3 = 400;
    }

这是代码

NSDictionary *temp = [[NSDictionary alloc]initWithContentsOfFile:[NSBundle mainBundle] pathForResource:@"test" ofType:@"plist"]];

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

NSString *str_nickname = [temp objectForKey:@"nickname"];
NSMutableArray *levels = [NSMutableArray new];
NSMutableArray *score =  [NSMutableArray new];

for (NSString *key in [temp allKeys]){

    if ( [key isEqualToString:@"levels"]) {  //replace object with new name

           levels = [NSMutableArray arrayWithArray:(NSArray *)[temp objectForKey:key]];

    }
    else if ( [key isEqualToString:@"score"]){

           score = [NSMutableArray arrayWithArray:(NSArray *)[temp objectForKey:key]];

    }
}

NSLog(@"Nick : %@ \n levels : %@ \n score : %@ \n",str_nickname,levels,score)