2013-06-26 4 views
0

Я пытаюсь создать словарь, содержащий словарь в нем (в конце концов я надеюсь преобразовать в JSON). Проблема в том, что у меня возникают проблемы с ее созданием.Добавить Mutable Dictionary в Mutable Dictionary для преобразования в JSON

До сих пор у меня это, что он должен делать, это построить небольшой словарь с ключами и добавить его в словарь большего размера, сбросить, а затем загрузить небольшой dict и затем добавить его в большой.

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); 

Вход хотел бы надеяться, читать SendText

Первый словарь строит хорошо, но как только я пытаюсь добавить его ко второму т бомжей с EXC_BAD_ACCESS

Я думаю, что это проблема с адресацией памяти, потому что они оба изменяемы, но я не уверен, возможно, вложенный список не должен быть изменчивым. Любая помощь оценивается.

В конечном счете, я хотел бы преобразовать это в JSON;

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

ответ

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 }; 
+0

Совершенное спасибо. Это тоже намного лучше ... Да, опечатка на JSON хорошо заметила. –

+0

Добро пожаловать. –