2010-02-03 59 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