如何使用NSArray中存储字典的键获取NSDictionary的值?

时间:2010-04-07 11:08:01

标签: objective-c cocoa-touch nsarray nsdictionary

我创建了5个NSDictionary。我将它们存储在NSArray中。我需要获取存储在NSDictionaries中的值。怎么办? 我试着打电话给[[array objectAtIndex:i]objectForKey:key1]。 但是,它通过给出消息来崩溃:发送到实例的无法识别的选择器 如何获取数据?

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"] );
}

2 个答案:

答案 0 :(得分:3)

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

按如下方式纠正该行:nemyData = [NSArray arrayWithObjects:enemy1, enemy2, nil];你应该做得很好。

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

答案 1 :(得分:0)

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

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