感谢您对以下方面的任何帮助:
我正在加载以下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 ?一旦我更新了这个值,我怎么把它“保存”回原来的字典?
答案 0 :(得分:2)
如果在反序列化JSON时需要可变字典和数组,请传递选项NSJSONReadingMutableContainers
。否则,出来的是不可变。如此处理它会导致你看到NSInternalInconsistencyException
。
您可以创建子字典的可变副本,如您显示的代码,但这不会更改原始顶级容器的内容。 (并将副本分配回循环底部的原始变量,完全没有任何结果。)
答案 1 :(得分:1)
在行中:
NSMutableDictionary *newdict = [item mutableCopy];
您正在创建item
的副本,然后修改副本。相反,只需直接修改item
:
[item setObject:[NSDate date] forKey:@"versiondate"];
我看到你试图用item = newdict
做什么,但这只会改变本地指针item
所指向的对象,而不会改变实际 dictionary
中的项目。