尝试在NSMutableArray的NSMutableDictionary中设置单个键/值对时:
[[self.items objectAtIndex:i] setValue:@"value" forKey:@"key"];
self.items
是NSMutableArray
,它有一个NSMutableDictionaries列表
不是设置为该单个对象,而是将其设置为列表中的所有字典。
之前我使用过这种方法。但我不知道在这种情况下发生了什么。
我知道NSArray
有setValue:@"value" forKey:@"key
方法,但在这种情况下我使用的是NSMutableArray
这里有一些代码块可以帮助澄清我的情况:
-(void)setItem:(id)sender
{
for (CellView *cell in self.CollectionView.visibleCells)
{
NSIndexPath *indexPath = [self.CollectionView indexPathForCell:cell];
int i = (indexPath.section * (mainItems.count)/3+ indexPath.row);
if (((UIButton *)sender).tag == i)
{
[[self.items objectAtIndex:i] setValue:@"value" forKey:@"key"];
}
}
}
答案 0 :(得分:3)
致电setObject:forKey:
,而不是setValue:forKey:
。有区别。
请注意,NSMutableArray
扩展了NSArray
,因此NSMutableArray
拥有NSArray
的所有方法。
我还建议你拆分你的阵容以及使用现代语法:
NSMutableDictionary *dict = self.items[i];
dict[@"key"] = @"value";
答案 1 :(得分:1)
NSMutableArray
是NSArray
的子类,因此所有NSArray
方法仍然存在于NSMutatbleArray
中。您可以尝试将其拉出并将其重新插入以解决问题,然后在...后重新组装代码。
NSMutableDictionary *d = [self.items objectAtIndex:i];
[d setValue:@"value" forKey:@"key"];
[self.items setObject: d atIndexedSubscript: i];
这是一个更明确的,它可以让你更容易调试(没有意外 nils 等)。
答案 2 :(得分:0)
好的,我遇到了这个问题。
我正在处理大量预先存在的代码。我注意到MutableDictionary
是全局定义的,同一个对象被添加到MutableArray
。所以基本上MUtableArray
中指向单个对象的所有指针。