2012-06-12 7 views
0

그래서 배열이있는 사전에 사전이 있습니다. 나는 두 번째 사전에있는 배열에 추가하려고합니다.다른 NSDictionary의 NSMutableDictionary에 NSMutableArray에 객체 추가

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

생성은 내가

내가 그런

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

처럼 추가 할 SIGABRT 오류와 끝까지 난 내가 뭐하는 거지 알고있는 배열에 바로 추가 할 여러 요소 작동하는 것 같다 어떤 문제가 있으며 어떤 도움이 크게 감사 할지를 알고 싶습니다.

+1

이 라인을 깨는 시도하고 있는지 확인 – Mark

+1

에 실패한 부분을 참조 호출 "[food_prop의 objectForKey을 : @"설명 "]"내가 objectForKey food_prop ['내기 –

+1

하지 전무하다 : @ "설명" ]''아니다 ' – 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 - 내가 한 번 이상 upvote 할 수 있다면 :) – deanWombourne

관련 문제