通过NSMutableDictionary迭代并更改值

时间:2012-09-27 04:01:25

标签: ios xcode nsmutabledictionary

感谢您对以下方面的任何帮助:

我正在加载以下JSON数据..

(
    {
    name = Facilities;
    versiondate = "1972-01-01";
},
    {
    name = Services;
    versiondate = "1972-01-01";
},
    {
    name = ThingsToDo;
    versiondate = "1972-01-01";
}
)

进入以下代码:

NSMutableDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:updateData options:kNilOptions error:&errorString];

然后我试图迭代字典并尝试将 versiondate 更改为今天的日期。我花了两个多小时试图做到这一点......没有运气!我正在努力去理解MutableCopies等。我在这方面比较新......

所以,我正在尝试以下方法:

for (NSMutableDictionary *item in dictionary)
{
    NSMutableDictionary *newdict = [item mutableCopy];
    NSLog(@"I have item as: %@",newdict);
    NSLog(@"I have the date as: %@", [newdict objectForKey:@"versiondate"]);
    [newdict setObject:[NSDate date] forKey:@"versiondate"];
    NSLog(@"I now have the date as: %@", [newdict objectForKey:@"versiondate"]);
    NSLog(@"I have item as: %@",newdict);
    item = newdict;
}

NSLog(@"New Dictionary now becomes: %@", dictionary);

忽略了NSLog的东西,我没有运气。我只是想将 versiondate 更改为今天的日期,然后为每个 versiondate 保存它。叹息。

任何帮助告诉我“明显”错误的位置将不胜感激。我将项目声明为NSMutableDictionary ...那么为什么我必须定义 newdict ?一旦我更新了这个值,我怎么把它“保存”回原来的字典?

2 个答案:

答案 0 :(得分:2)

如果在反序列化JSON时需要可变字典和数组,请传递选项NSJSONReadingMutableContainers。否则,出来的是可变。如此处理它会导致你看到NSInternalInconsistencyException

您可以创建子字典的可变副本,如您显示的代码,但这不会更改原始顶级容器的内容。 (并将副本分配回循环底部的原始变量,完全没有任何结果。)

答案 1 :(得分:1)

在行中:

NSMutableDictionary *newdict = [item mutableCopy];

您正在创建item副本,然后修改副本。相反,只需直接修改item

[item setObject:[NSDate date] forKey:@"versiondate"];

我看到你试图用item = newdict做什么,但这只会改变本地指针item所指向的对象,而不会改变实际 dictionary中的项目。