1

在尝试在 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"];
        }
    }
}
4

3 回答 3

3

打电话setObject:forKey:,不是setValue:forKey:。它们是有区别的。

请注意,NSMutableArrayextend NSArraysoNSMutableArray具有 的所有方法NSArray

我还建议您拆分阵容并使用现代语法:

NSMutableDictionary *dict = self.items[i];
dict[@"key"] =  @"value";
于 2013-08-30T14:25:53.390 回答
1

NSMutableArray是的子类,NSArray所以所有的NSArray方法都还在NSMutatbleArray. 您可以尝试将其拉出并放回原处以解决问题,然后在...之后重新组装您的代码

NSMutableDictionary *d = [self.items objectAtIndex:i];
[d setValue:@"value" forKey:@"key"];
[self.items setObject: d atIndexedSubscript: i];

这更明确一点,可以让您更轻松地调试它(不会得到意外的 nils等)。

于 2013-08-30T14:31:28.947 回答
0

好的,我得到了这个问题。

我正在研究一个大型的预先存在的代码。我注意到 TheMutableDictionary是全局定义的,并且相同的对象被添加到MutableArray. 所以基本上MUtableArraywhere 中的所有指针都指向一个对象。

于 2013-08-30T18:11:45.737 回答