【问题标题】:Set value for key of a single NSMutableDictionary from an array of NSMutableArray从 NSMutableArray 数组中为单个 NSMutableDictionary 的键设置值
【发布时间】:2013-08-30 14:22:21
【问题描述】:

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

【问题讨论】:

  • 验证 [self.items objectAtIndex:i] 是否真的返回字典
  • 如果 objectAtIndex:i 是一个可变 dict 并且 value 永远不会是 nil,那么你应该使用 setObject:forValue: setValue 还有很多其他的事情

标签: ios objective-c nsmutablearray


【解决方案1】:

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

注意NSMutableArray 扩展了NSArray 所以NSMutableArray 拥有NSArray 的所有方法。

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

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

【讨论】:

  • 感谢其他 cmets,但setObject:forKey: 也将其设置为列表中的所有对象
  • 不,setObject:forKey: 没有设置列表中的所有对象。它只会改变一个字典中的一个值。我建议您使用更多代码更新您的问题,以便我们了解您的实际操作。
  • 是的,我已将其替换为 setObject:forKey: 并检查了它。结果是一样的。
【解决方案2】:

NSMutableArrayNSArray 的子类,所以所有NSArray 方法仍然存在于NSMutatbleArray 中。您可以尝试将其拉出并放回以解决问题,然后在...之后重新组装您的代码。

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

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

【讨论】:

    【解决方案3】:

    好的,我明白了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多