如何添加位于NSMutableDictionary和NSArray属性中的NSArray对象?

时间:2014-02-16 11:27:09

标签: ios objective-c nsarray nsmutabledictionary key-value

如何在下面的结构中添加“kArrayOfItemsInTheBox”键的项目?

NSArray* arrayOfBoxes = @[
                       [NSMutableDictionary dictionaryWithDictionary:@{
                                                                       kArrayOfItemsInTheBox : [NSArray arrayWithObjects:@"1",@"2", nil],
                                                                       kBoxNumber : @"Box nr 1",
                                                                       }
                        ],

                       [NSMutableDictionary dictionaryWithDictionary:@{
                                                                       kArrayOfItemsInTheBox : [NSArray arrayWithObjects:@"1",@"2", nil],
                                                                       kBoxNumber : @"Box nr 2",
                                                                       }
                        ]
                       ];
self.packageData = [NSMutableArray arrayWithArray:arrayOfBoxes];

我知道如何显示数组中的项目但是在现有列表的末尾添加新对象时遇到了问题。我需要使用packageData属性添加此值。 添加新值后的最终结果应如下所示:

 NSArray* arrayOfBoxes = @[
                       [NSMutableDictionary dictionaryWithDictionary:@{
                                                                       kArrayOfItemsInTheBox : [NSArray arrayWithObjects:@"1",@"2",@"Added Item", nil],
                                                                       kBoxNumber : @"Box nr 1",
                                                                       }
                        ],

                       [NSMutableDictionary dictionaryWithDictionary:@{
                                                                       kArrayOfItemsInTheBox : [NSArray arrayWithObjects:@"1",@"2", nil],
                                                                       kBoxNumber : @"Box nr 2",
                                                                       }
                        ]
                       ];

我试着像:

[[self.packageData objectAtIndex:myIndex]addObject:@{kArrayOfItemsInTheBox:@"NewValue" }];

如果不可能做到,也许您更好地了解如何使用相同的逻辑创建结构。提前致谢

2 个答案:

答案 0 :(得分:2)

首先,您要添加的数组是不可变的,因此您需要更改为使用NSMutableArray

然后,您需要浏览数据结构。你有一个包含数组和字符串的字典数组。你需要深入研究这个结构。您当前的代码深入到外部数组,但后来尝试将字典视为数组。

尝试(在使内部数组变为可变之后):

[[[self.packageData objectAtIndex:myIndex] objectForKey:kArrayOfItemsInTheBox] addObject:@"NewValue"];

虽然最好将这一行分成几部分,以便更容易理解(因此,看看错误的位置)。

答案 1 :(得分:2)

目前结构最简单的方法是

NSMutableDictionary *item = [self.packageData objectAtIndex:myIndex];
item[kArrayOfItemsInTheBox] = [item[kArrayOfItemsInTheBox] arrayByAddingObject:newObject];

通常,一旦我必须在字典中使用常量键,我就考虑创建一个自定义对象