2010-02-03 5 views
0
의 NSDictionary에 대한 직접 액세스 지수를 얻는

여기에 코드입니다 :어떻게 NSDictionary에

NSMutableDictionary *circuit_step = [NSMutableDictionary dictionary];  
NSMutableDictionary *step_info = [NSMutableDictionary dictionary]; 

[step_info setObject: @"search" forKey: @"search-type"];  
[step_info setObject: @"small" forKey: @"search-format"];  
[step_info setObject: @"winter" forKey: @"search-season"];  
[step_info setObject: @"tree" forKey: @"search-location"]; 

**[circuit_step setObject: circuit_step forKey: @"01"];** 

[step_info setObject: @"search" forKey: @"search-type"]; 
[step_info setObject: @"micro" forKey: @"search-format"];  
[step_info setObject: @"summer" forKey: @"search-season"];  
[step_info setObject: @"by the lake"   forKey: @"search-location"]; 

**[circuit_step setObject: circuit_step forKey: @"02"];** 

NSLog에 적합한 형식으로 dictionary circuit_step key "01"dictionary step_info key "search-location"에 직접 액세스 할 수있는 코드는 무엇입니까?

NSLog(@"Value is %@", 
    [[circuit_step objectForKey: @"01"] objectForKey: @"search-location"]) 

에 대한 것은 또한, 코드가 모든 잘못은 무엇

+0

코드에 배열이 없습니다. –

+0

안녕 St3fan, 배열 문을 맨 위에 추가했습니다. – user261874

+0

여전히 배열이 아니라 사전입니다. NSLog 형식이란 무엇입니까? – Vladimir

답변

1

.

NSMutableDictionary *circuit_step = [NSMutableDictionary dictionary]; 
if (circuit_step != nil) 
{ 
    NSMutableDictionary* step_info = nil; 

    step_info = [NSMutableDictionary dictionary]; 
    if (step_info != nil) { 
     [step_info setObject: @"search" forKey: @"search-type"]; 
     [step_info setObject: @"small" forKey: @"search-format"]; 
     [step_info setObject: @"winter" forKey: @"search-season"]; 
     [step_info setObject: @"tree" forKey: @"search-location"]; 
     [circuit_step setObject: step_info forKey: @"01"]; 
    } 

    step_info = [NSMutableDictionary dictionary]; 
    if (step_info != nil) {  
     [step_info setObject: @"search" forKey: @"search-type"]; 
     [step_info setObject: @"micro" forKey: @"search-format"]; 
     [step_info setObject: @"summer" forKey: @"search-season"]; 
     [step_info setObject: @"by the lake" forKey: @"search-location"]; 
     [circuit_step setObject: step_info forKey: @"02"]; 
    } 
} 

당신은 circuit_step의 오른쪽 객체를 설정하지 않는 한 당신은 두 개의 항목이 '02'의 값과 같은 사전을 가리키는로 끝날 것입니다, 그래서 당신은 또한 사전을 다시 사용했다 : 여기에 고정 된 버전입니다.

+0

감사 St3fan, 코드는 위대한 일하고있다! GPSDEV – user261874

+0

St3fan, 저의 이해를 돕기 위해이 세 줄의 차이점은 무엇입니까? 1- NSMutableDictionary * step_info = [NSMutableDictionary dictionary]; 2- NSMutableDictionary * step_info = nil; 3- 스텝 정보 = [NSMutableDictionary 사전]; 감사의 말 – user261874

+0

사소한 질문. 모든 변경 가능한 콜렉션에 대해 선호되는 초기화 기는'initWithCapacity'의 변종입니다. 이 경우 'dictionaryWithCapcity;' 또는''initWithCapacity :'. 간단하게 시작 용량을 1로 설정하십시오. 상속 된 generic initializer를 사용하면 때때로 이상한 문제가 발생할 수 있습니다. – TechZen