2010-04-07 77 views
1

我已经创建了5个NSDictionary。我将它们存储在NSArray中。我需要获取存储在NSDictionaries中的值。怎么办?我试过拨打[[array objectAtIndex:i]objectForKey:key1]。 但是,它通过提供消息而崩溃:发送到实例的无法识别的选择器 如何获取数据?如何使用字典存储在NSArray中的键来获取NSDictionary的值?

NSDictionary *enemy1, *enemy2; 
NSArray *enemyData; 
-(void)viewDidLoad 
{ 
enemy1 = [NSDictionary dictionaryWithObjectsAndKeys:@"3", @"Countdown speed", @"3", @"Enemy gun draw", @"1", @"Enemy gun fire", @"0.8", @"Enemy hit probability", @"1", @"Enemy re-fire interval", nil]; 
enemy2 = [NSDictionary dictionaryWithObjectsAndKeys:@"3", @"Countdown speed", @"2.8", @"Enemy gun draw", @"0.9", @"Enemy gun fire", @"0.8", @"Enemy hit probability", @"0.9", @"Enemy re-fire interval", nil];  
enemyData = [NSArray arrayWithObjects:@"enemy1", @"enemy2", nil]; 
NSLog(@"Value in Array: %f", [ [enemyData objectAtIndex:1]objectForKey:@"Enemy gun draw"]); 
} 
+0

这是正确的方法;所以如果它没有工作,其他的东西是错误的(例如,也许你正在检索的对象不是一个真正的NSDictionary)。这可能有助于发布您用来创建,存储和访问NSDictionary的代码,以及确切的错误消息。 – 2010-04-07 11:16:43

+0

它也可能有助于将调用分解为中间步骤(例如,将字典从数组中取出到一个临时变量中,如果这不会立即引发问题,您可能会发现在调试器 – philsquared 2010-04-07 11:23:11

+0

我也发布了我的程序。谢谢。 – 2010-04-07 11:31:51

回答

3

您将字符串@“enemy1”和@“enemy2”添加到您的数组中,而不是字典。

更正行,如下所示:nemyData = [NSArray arrayWithObjects:enemy1, enemy2, nil];,你应该是不错的。

注意,如果你想稍后访问它们(我想)你需要保留它们,因为你的变量自动释放,你可能会遇到内存问题。

+1

感谢您对内存问题的帮助和建议。我更正了我的代码。 – 2010-04-07 12:17:20

0

除了您提出的问题(已被回答)之外,NSLog格式字符串也存在问题。 %f是双打,而不是对象。您需要使用%@来格式化NSDictionary的objectForKey:方法返回的任何内容。顺便提一句,你正在存储的对象是NSStrings。 NSNumbers可能更好,例如

enemy1 = [NSDictionary dictionaryWithObjectsAndKeys: 
          [NSNumber numberWithInt: 3], @"Countdown speed", 
          [NSNumber numberWithDouble: 1.0], @"Enemy gun fire"... 
相关问题