ios - 更改嵌套 NSMutableDictionary 中的值

标签 ios objective-c nsmutabledictionary

我有一个 NSMutableDictionary,我想将元素的值更改为它。

//My dictionary:

{
    objectId = 8ED998yWd1;
    cardInfo =     {
        state = published; //THIS!
        price = 40;
        color = red;
        }   
};

我尝试了几种方法,但值没有改变,像这样:

[dictionary setObject:@"reserved" forKey:@"state"]; //nope

或者这个:

[dictionary setValue:@"reserved" forKeyPath:@"cardInfo.state"]; //nope

或者:

[[dictionary objectForKey:@"cardInfo"] setObject:@"reserved" forKey:@"state"]; //no

还有这个:

[dictionary setObject:@"reserved" forKey:[[dictionary objectForKey:@"cardInfo"] objectForKey:@"state"]];

如何将对象“状态”从“已发布”更改为“保留”?

谢谢!

最佳答案

假设 dictionarycardInfo 都是 NSDictionary 实例:

您可以获取嵌套字典的可变副本,修改适当的值,然后将修改后的字典写回到“顶级”字典中,如下所示:

NSMutableDictionary *mutableDict = [dictionary mutableCopy];
NSMutableDictionary *innerDict = [dictionary[@"cardInfo"] mutableCopy];
innerDict[@"state"] = @"reserved";
mutableDict[@"cardInfo"] = innerDict;
dictionary = [mutableDict copy];

我猜你可以把它压缩成一行,但这将是一条难看的线。

编辑:

如果外部和内部字典都已经可变,那么当然会稍微简化事情:

NSMutableDictionary *innerDict = dictionary[@"cardInfo"];
innerDict[@"state"] = @"reserved";
dictionary[@"cardInfo"] = innerDict;

关于ios - 更改嵌套 NSMutableDictionary 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33425735/

相关文章:

ios - iOS (Swift 4) 中的 Azure AD B2C ROPC 流错误 - 资源所有者流只能由通过 B2C 管理门户创建的应用程序使用

ios UITableViewCell 以编程方式在 drawRect 与 layoutSubviews 中创建

ios - 如何识别 ImageView 中不同位置的不同操作?

objective-c - NSMutableDictionary 将多个对象添加到一个键

ios - 如何在ios字典中创建包含可变数组的参数(mutabledictionary)

iphone - 如何将值添加到属性列表字典内的字典

objective-c - 使用 prepareForSegue 在 View 之间发送图像

objective-c - iOS - 将数组保存到磁盘所需的时间

ios - 不能使用谓词来比较 Magical Record 中的日期

ios - NSMutableDictionary 在每个插入索引中复制最后插入的索引,而不是插入新索引