将Mutable Dictionary添加到Mutable Dictionary以转换为JSON

时间:2013-06-26 13:07:53

标签: xcode json cocoa embed nsmutabledictionary

我正在尝试构建一个字典,其中包含字典(最终我希望转换为JSON)。问题是我在构建它时遇到了问题。

到目前为止,我有这个,它应该做的是用键创建一个小字典,并将其添加到一个更大的字典,重置,然后加载小字典,然后将其添加到大字典。

NSMutableDictionary *nestedList = [[NSMutableDictionary alloc]init];   
NSMutableDictionary *nestedSections = [[NSMutableDictionary alloc] init];



[nestedList addEntriesFromDictionary:[NSDictionary dictionaryWithObjectsAndKeys:
                                      [NSNumber numberWithInt:46], @"menuHeight",
                                      @"editText", @"menuMethod",
                                      [NSNumber numberWithInt:1], @"menuOption",
                                      nil]];

[nestedSections addEntriesFromDictionary:[NSDictionary dictionaryWithObjectsAndKeys:
                                          nestedList, "@Basic",

                                          nil]];
[nestedList removeAllObjects];

[nestedList addEntriesFromDictionary:[NSDictionary dictionaryWithObjectsAndKeys:
                                      [NSNumber numberWithInt:92], @"menuHeight",
                                      @"sendText", @"menuMethod",
                                      [NSNumber numberWithInt:1], @"menuOption",
                                      nil]];

[nestedSections addEntriesFromDictionary:[NSDictionary dictionaryWithObjectsAndKeys:
                                          nestedList, "@Pro",

                                          nil]];

然后我希望这样解决;

NSString *string = [[nestedSections objectForKey:@"Pro"] objectForKey:@"menuMethod"];
NSLog(@"Method is : %@", string);

Log希望阅读 sendText

第一个字典构建正常,但是一旦我尝试使用EXC_BAD_ACCESS将其添加到第二个字典中

我认为这是一个内存寻址问题,因为它们都是可变的但我不确定,也许nestedList不应该是可变的。任何帮助表示赞赏。

最终我想把它转换为像JSON一样的

{
   "Basic":
     {
        "menuHeight":"46",
        "menuMethod":"editText",
        "menuOption":"1",
     },
   "Pro":
     {       
        "menuHeight":"96",
        "menuMethod":"sendText",
        "menuOption":"1",
     }
 }

1 个答案:

答案 0 :(得分:2)

一个。 NSMutableDictionary不会复制值(仅键)。因此,您需要两次添加相同的字典,并在删除对象时更改它们(=一个),依此类推。除了示例JSON中的数字之外,数字看起来像字符串而不是数字。我想,这是一个错字。

B中。添加现代Objective-C以提高可读性,它应如下所示:

NSDictionary *basicDictionary = 
@{
    @"menuHeight" : @46,
    @"menuMethod" : "editText",
    @"menuOption : @1
}

NSDictionary *proDictionary = 
@{
    @"menuHeight" : @96,
    @"menuMethod" : "sendText",
    @"menuOption : @1
}

NSDictionary *nestedSections = @{ @"Pro" : proDictionary, @"Basic" : basicDictionary };