我创建了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"] );
}
答案 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"...