我需要以下结果:
(
"some_key" = {
"another_key" = "another_value";
};
);
为了做到这一点,我有这个代码,但它不起作用:
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"another_value", @"another_key", nil];
NSMutableArray *array = [[NSMutableArray alloc] init];
[array setValue:dictionary forKey:@"some_key"];
任何想法?谢谢!
答案 0 :(得分:16)
您的错误在这里:
NSMutableArray *array = [[NSMutableArray alloc] init];
[array setValue:dictionary forKey:@"some_key"];
------------ ^^^^^
您将此设置为数组。
试试这个:
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"another_value", @"another_key", nil];
NSDictionary *outDict=[[NSDictionary alloc]initWithObjectsAndKeys:dictionary,@"some_key", nil];
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:outDict, nil];
在新文字中:
NSDictionary *d=@{@"another_key":@"another_value"};
NSDictionary *c=@{@"some_key":d};
NSArray *array=@[c];
或嵌套创作:
NSArray *array=@[@{@"some_key":@{@"another_key":@"another_value"}}];
答案 1 :(得分:4)
通常只需在末尾添加对象即可构建NSMutableArray
。方法是addObject:
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"another_value", @"another_key", nil];
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:dictionary];
另一方面,如果你想通过一个键来解决字典(@" some_key"),那么你也需要外容器作为字典:
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"another_value", @"another_key", nil];
NSMutableDictionary *outerDict = [NSMutableDictionary dictionary];
[outerDict setObject:dictionary forKey:@"some_key"];
答案 2 :(得分:2)
来自文档
setValue:forKey: - 设置a指定的接收者的属性 给定给定值的关键。
该NSKeyValueCoding
协议。您正在使用错误的方法将对象添加到数组中,NSArray
是有序集合,而不是字典。做你需要的最简单的方法是:
NSDictionary* dic = @{@"some_key": @{@"another_key": @"another_value"}};
如您所见,输出为NSDictionary
而不是NSArray
。
答案 3 :(得分:2)
数组不使用setValue:forKey:
(也不是setObject:forKey:
),数组不像字典那样关联。
setValue:forKey:
是KVC(键值编码)。
你想要一个字典词典数组(下面是伪plist形式)
<array>
<dict>
<key>someKey</key>
<dict>
<key>someOtherKey</key>
<string>someValue</string>
</dict>
</dict>
<dict>
<key>someKey</key>
<dict>
<key>someOtherKey</key>
<string>someValue</string>
</dict>
</dict>
<dict>
<key>someKey</key>
<dict>
<key>someOtherKey</key>
<string>someValue</string>
</dict>
</dict>
<dict>
<key>someKey</key>
<dict>
<key>someOtherKey</key>
<string>someValue</string>
</dict>
</dict>
</array>
`
答案 4 :(得分:2)
我认为你正在寻找这种结构
NSDictionary *anotherKeyValueDictionary =
[[NSDictionary alloc] initWithObjectsAndKeys:@"another_value",
@"another_key", nil];
NSDictionary *someKeyValueDictionary =
[[NSDictionary alloc] initWithObjectsAndKeys:@"anotherKeyValueDictionary",
@"some_key", nil];
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:someKeyValueDictionary];