我有一个IPhone应用程序,其中我有一个元素数组,但我需要字典中的每个元素,即。 (nsmuatblearray of dictionaries),我确实喜欢这个但有时它会给出一些不必要的结果 `
id objectInstance;
NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];
for (objectInstance in self.SelectedContacts)
[mutableDictionary setObject:objectInstance forKey:@"tag"];
[finalarray addObject:mutableDictionary];
` 我这样做可以有人指出我哪里出错了吗?
答案 0 :(得分:2)
你这样做的方式是覆盖键#34;标签"的元素。每次。我不完全确定你想要完成什么,但我怀疑你应该写一些类似的东西:
for (id objectInstance in self.SelectedContacts) {
NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];
[mutableDictionary setObject:objectInstance forKey:@"tag"];
[finalarray addObject:mutableDictionary];
}
答案 1 :(得分:1)
在循环中,您将不同的对象放在相同的标记名称" tag"中。所以这里只保存最后一个objectInstance,其余的全部由下一个替换。
如果您希望保存其中的每一个,请更新您的"标记"使用新的标记名称。
另一件事是,您错过了在上面的代码中显示{
,或者您确实没有那些大括号{
和}
for
然后只有下一行被循环占用,[finalarray addObject:mutableDictionary];
被执行一次!!!
答案 2 :(得分:0)
这里不需要创建NSMutableDictionary
,因为你只是用它来保存在数组中,没有进一步的修改。
此外,它会消耗比NSDictionary
更多的内存。将来,如果您想更新字典中的对象,可以使用
NSDictionary
转换为NSMutableDictionary
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithDictionary:object];
,反之亦然NSDictionary
。
现在是一种在数组中添加字典的简单方法:
NSMutableArray *finalArray = [NSMutableArray new];
for (NSDictionary *object in self.SelectedContacts) {
[finalArray addObject:@{ @"tag" : object }];
}
答案 3 :(得分:0)
如果你想要一个每个都有相同键的字典数组,或者一个包含1个字典的数组,你的问题不是100%肯定。
许多字典版本
for (long i = 0; i < [self.SelectedContacts count];i++)
{
NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];
[mutableDictionary setObject:[self.SelectedContacts objectAtIndex:i] forKey:@"tag"];
[finalarray addObject:mutableDictionary];
}
1字典版
NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];
for (long i = 0; i < [self.SelectedContacts count];i++)
{
NSString *keyString = [NSString stringWithFormat:@"tag_%li",i];
[mutableDictionary setObject:[self.SelectedContacts objectAtIndex:i] forKey:keyString];
}
[finalarray addObject:mutableDictionary];
在这个1字典版本中,标签将是tag_,后跟数组中的旧索引值。
TAG_0 TAG_1 等