如何在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!!!
}
}
此外,我想更新新词典中的新分数,并且必须在相应的级别对象上更新,可能是通过索引?
答案 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)