【问题标题】:Add NSArray value to NSDictionary not a reference将 NSArray 值添加到 NSDictionary 而不是引用
【发布时间】:2015-03-24 05:12:26
【问题描述】:

我正在尝试使用以下代码插入带有动态数组值的键值对。它将所有值的数组内容替换为最后存储的数组对象。请建议如何存储数组的副本而不是参考。 示例代码:

  for (i = i - 1; i >= 0; i--) {
        [dict setObject:urlArray forKey:rootDate];
        [urlArray removeAllObjects];
        [urlArray addObject:[[history objectAtIndex:i] objectAtIndex:0]];
    }

也尝试了 setValue 方法返回相同的结果。

{
"18/03/15" =     (
    "http://www.yahoo.com"
);
"24/03/15" =     (
    "http://www.google.com",
    "http://www.youtube.com"
);

} 收到的实际输出:

{
"18/03/15" =     (
    "http://www.google.com",
    "http://www.youtube.com"
);
"24/03/15" =     (
    "http://www.google.com",
    "http://www.youtube.com"
);

}

【问题讨论】:

  • Deep copying an NSArray的可能重复
  • 您的代码始终使用相同的键,因此您的字典将只包含一次。而且你的循环很奇怪。您假设数组在第一次迭代之前设置,并且在最后一次迭代之后它包含尚未添加到字典中的数据。

标签: ios objective-c nsarray nsmutabledictionary


【解决方案1】:

只需根据您对 urlArray 的需要创建 copy/mutableCopy

for (i = i - 1; i >= 0; i--) {
        [dict setObject:[urlArray copy] forKey:rootDate];
        [urlArray removeAllObjects];
        [urlArray addObject:[[history objectAtIndex:i] objectAtIndex:0]];
    }

【讨论】:

    【解决方案2】:
    for (i = i - 1; i >= 0; i--) {
            [dict setObject:[urlArray mutableCopy] forKey:rootDate];
            [urlArray removeAllObjects];
            [urlArray addObject:[[history objectAtIndex:i] objectAtIndex:0]];
        }
    

    如果您不希望数组可变,也可以使用[urlArray copy]

    【讨论】:

      猜你喜欢
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      相关资源
      最近更新 更多