从NSMutableArray数组中设置单个NSMutableDictionary的键的值

时间:2013-08-30 14:22:21

标签: ios objective-c nsmutablearray

尝试在NSMutableArray的NSMutableDictionary中设置单个键/值对时:

[[self.items objectAtIndex:i] setValue:@"value" forKey:@"key"];

self.itemsNSMutableArray,它有一个NSMutableDictionaries列表

不是设置为该单个对象,而是将其设置为列表中的所有字典。

之前我使用过这种方法。但我不知道在这种情况下发生了什么。

我知道NSArraysetValue:@"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"];
        }
    }
}

3 个答案:

答案 0 :(得分:3)

致电setObject:forKey:,而不是setValue:forKey:。有区别。

请注意,NSMutableArray扩展了NSArray,因此NSMutableArray拥有NSArray的所有方法。

我还建议你拆分你的阵容以及使用现代语法:

NSMutableDictionary *dict = self.items[i];
dict[@"key"] =  @"value";

答案 1 :(得分:1)

NSMutableArrayNSArray的子类,因此所有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中指向单个对象的所有指针。