Ios 向另一个NSDictionary中的NSMutableDictionary中的NSMutableArray添加对象

Ios 向另一个NSDictionary中的NSMutableDictionary中的NSMutableArray添加对象,ios,nsmutablearray,add,nsmutabledictionary,Ios,Nsmutablearray,Add,Nsmutabledictionary,所以我有一个字典,在一个有数组的字典里。我试图添加到第二个字典中的数组中 [mealInfo setObject:[[NSMutableDictionary alloc]init] forKey:@"breakfast"]; [[mealInfo objectForKey:@"breakfast"] setObject:[[NSMutableArray alloc] init] forKey:@"name"]; [[mealInfo objectForKey:@"breakfast"

所以我有一个字典,在一个有数组的字典里。我试图添加到第二个字典中的数组中

 [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"]];

我知道我做错了什么,我想知道有什么帮助我会非常感激。

首先,你在使用ARC吗?否则你会有很多麻烦


你应该根据最少的知识和最基本的原则来阅读

使这样的结构更直观:

    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"];

首先,你在使用ARC吗?否则你会有很多麻烦


你应该根据最少的知识和最基本的原则来阅读

使这样的结构更直观:

    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"];

试着拆开这条线,看看哪个部分失败了,确保“[food_-prop objectForKey:@“description”]”不是nilI bet
[food_-prop objectForKey:@“description”]
nil
诅咒@OmarAbdelhafith,你比我快29秒@deanWombourne hehe,抱歉,伙计,我先来了:试着把线打断,看看哪一部分在确保“[food_-prop objectForKey:@“description”]”不是零我打赌
[food_-prop objectForKey:@“description”]
诅咒@Omarabelhafith,你比我快29秒@deanWombourne hehe,抱歉,伙计,我先来了:PI让我的工作正常,但我喜欢你的解决方案。他们现在谈论的都是正确的东西,但我遗漏了一些重要的东西,基本上我覆盖了数组,这是不好的。现在我不是,它正在工作。我把它弄得如此复杂,主要是因为它将节省大量的代码行以及大量的内部函数调用,与使用系统中内置的调用相比,我觉得这些调用效率较低。但你的方法会奏效,因此我会让它成为答案,因为它比我的方法更容易遵循。更有效的方法并不总是更少的代码行。编译器通常会为您压缩所有这些内容。还要考虑调试时间,你不得不花额外的时间请别人帮你解决这个问题,这比写一个更详细的解决方案要花更长的时间。我知道,更压缩并不总是更有效,但数组字典是一个本地对象,它可以在另一个NSObject中取消30个对getter和setter的调用,并带来所有这些在O(1)引用处引用的本地。另外,我的引用避免了所有这些函数调用,这将导致更高效的汇编语言,从而提高效率。另外,关于调试,我在发送此文件时实际上已经正确地修复了它。我在传输数据结构,这总是一个大任务,会导致重叠和错误。如果你的单个函数调用是O(1),那么我的也是O(1),因为它只是你的分解成它的单个命令。你真的不必优化你的程序集,如果你这样做,我会更担心你的程序设计。我会担心代码的可维护性。30个命名良好的getter和setter在编写代码所需的时间上要比您在尝试记住字典键的名称等时遇到的问题有效得多。我的工作已经完成,但我喜欢您的解决方案。他们现在谈论的都是正确的东西,但我遗漏了一些重要的东西,基本上我覆盖了数组,这是不好的。现在我不是,它正在工作。我把它弄得如此复杂,主要是因为它将节省大量的代码行以及大量的内部函数调用,与使用系统中内置的调用相比,我觉得这些调用效率较低。但你的方法会奏效,因此我会让它成为答案,因为它比我的方法更容易遵循。更有效的方法并不总是更少的代码行。编译器通常会为您压缩所有这些内容。还要考虑调试时间,你不得不花额外的时间请别人帮你解决这个问题,这比写一个更详细的解决方案要花更长的时间。我知道,更压缩并不总是更有效,但数组字典是一个本地对象,它可以在另一个NSObject中取消30个对getter和setter的调用,并带来所有这些在O(1)引用处引用的本地。另外,我的引用避免了所有这些函数调用,这将导致更高效的汇编语言,从而提高效率。另外,关于调试,我在发送此文件时实际上已经正确地修复了它。我在传输数据结构,这总是一个大任务,会导致重叠和错误。如果你的单个函数调用是O(1),那么我的也是O(1),因为它只是你的分解成它的单个命令。你真的不必优化你的程序集,如果你这样做,我会更担心你的程序设计。我会担心代码的可维护性。30个命名良好的getter和setter在编写代码所需的时间上比您在试图记住字典键的名称等时遇到的问题要高效得多。