2012-06-12 2 views
0

Итак, у меня есть словарь в словаре с массивами. Я пытаюсь добавить к массивам, которые находятся во втором словаре.Добавление объекта в NSMutableArray в NSMutableDictionary в другом NSDictionary

[mealInfo setObject:[[NSMutableDictionary alloc]init] forKey:@"breakfast"]; 
[[mealInfo objectForKey:@"breakfast"] setObject:[[NSMutableArray alloc] init] forKey:@"name"]; 
    [[mealInfo objectForKey:@"breakfast"] setObject:[[NSMutableArray alloc] init] forKey:@"detail"]; 
    [[mealInfo objectForKey:@"breakfast"] setObject:[[NSMutableArray alloc] init] forKey:@"ndb"]; 
    [[mealInfo objectForKey:@"breakfast"] setObject:[[NSMutableArray alloc] init] forKey:@"id"]; 
    [[mealInfo objectForKey:@"breakfast"] setObject:[[NSMutableArray alloc] init] forKey:@"alias"]; 

Создание, кажется, работает только при добавлении нескольких элементов в массивах, где я в конечном итоге с ошибкой SIGABRT

я добавить, как такой

[[[initMealInfo->mealInfo objectForKey:@"breakfast"] objectForKey:@"name"] addObject:[food_prop objectForKey:@"description"]]; 

Я знаю, что я делаю что-то не так, и хотелось бы выяснить, какая помощь будет высоко оценена.

+1

Попробуйте разбить линию и увидеть, какая часть она не на – Mark

+1

убедитесь, что «[food_prop objectForKey: @» описание «]» не ноль –

+1

Держу пари '[food_prop objectForKey: @«Описание» ] 'is' nil' – deanWombourne

ответ

3

Во-первых, вы используете ARC? Иначе у вас много проблем.


Вы должны прочитать о принципе наименьшего знаний и Law Of Demeter

Делает структуру, как это более интуитивным:

NSMutableDictionary *mealInfo = [[NSMutableDictionary alloc] init]; 

    NSMutableDictionary *breakfast = [[NSMutableDictionary alloc] init]; 
    [breakfast setObject:[[NSMutableArray alloc] init] forKey:@"name"]; 
    [breakfast setObject:[[NSMutableArray alloc] init] forKey:@"detail"]; 
    [breakfast setObject:[[NSMutableArray alloc] init] forKey:@"ndb"]; 
    [breakfast setObject:[[NSMutableArray alloc] init] forKey:@"id"]; 
    [breakfast setObject:[[NSMutableArray alloc] init] forKey:@"alias"]; 

    [mealInfo setObject:breakfast forKey:@"breakfast"]; 

Тогда попробуйте разбить его немного вниз, когда вы пытаетесь для ввода информации и обертывания ее функцией

-(void) addMealName:(NSString*) name forMeal:(NSString*) meal 
{ 
    NSMutableDictionary *meals = [mealInfo objectForKey:meal]; 
    NSMutableArray *mealNames = [breakfast objectForKey:@"name"]; 
    [mealNames addObject:name]; 
    [meals setObject:breakfastNames forKey:@"name"]; 
    [mealInfo breakfast forKey:meal]; 
} 

И позвони

NSString *newMealName = [food_prop objectForKey:@"description"]; 
[initMealInfo addMealName:newMealName forMeal:@"breakfast"]; 
+0

Я получил свою работу, но мне нравится ваше решение. Они все теперь говорят с правильными вещами, но я отсутствовал, что было большим, в основном я переопределял массив, и это было бесполезно. Теперь я нет, и он работает. Я усложняю это, в основном потому, что он сэкономит много строк кода, а также сохранит множество внутренних вызовов функций, которые, по моему мнению, менее эффективны по сравнению с использованием вызовов, встроенных в систему поверх всех. Но ваш будет работать, и, таким образом, я сделаю это ответом, потому что это проще, чем мой метод. – Rob

+1

Более эффективный не всегда меньше строк кода. Компилятор будет часто сжимать все это для вас. Также подумайте о времени отладки, вам пришлось потратить дополнительное время на то, чтобы попросить людей помочь вам исправить это, что заняло больше времени, чем написание более сложного решения. –

+0

@JamesWebster - Если бы я мог бы продвигать более одного раза, я бы :) – deanWombourne

Смежные вопросы