2010-02-03 32 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"];** 

什麼代碼做dictionary circuit_step key "01"dictionary step_info key "search-location"的格式適合的NSLog直接訪問?

+0

代碼中沒有數組。 – 2010-02-03 15:14:40

+0

嗨St3fan,我沒有在頂部添加數組語句 – user261874 2010-02-03 15:17:52

+0

儘管他們不是數組,但字典。什麼是NSLog格式? – Vladimir 2010-02-03 15:22:29

回答

1

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

而且,你的代碼是什麼都錯了。這裏有一個固定的版本:

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 2010-02-03 16:21:03

+0

St3fan,據我的理解,這三行之間有什麼區別: 1- NSMutableDictionary * step_info = [NSMutableDictionary dictionary]; 2- NSMutableDictionary * step_info = nil; 3- step_info = [NSMutableDictionary dictionary]; 謝謝 – user261874 2010-02-03 16:49:26

+0

小問候。所有可變收集的首選初始值設定項都是'initWithCapacity'的變體。在這種情況下,您可能想要使用'dictionaryWithCapcity;'或''initWithCapacity:'。簡單地將容量設置爲1來啓動。使用繼承的通用初始化器有時會導致奇怪的問題。 – TechZen 2010-02-03 17:52:39