Как можно получить значения NSDictionary, используя ключи, где словари хранятся в NSArray? - PullRequest
1 голос
/ 07 апреля 2010

Я создал 5 NSDictionary's. Я сохранил их в 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 ]

3 голосов
/ 07 апреля 2010

Вы добавляете строки @ "врага1" и @ "врага2" в свой массив, а не словари.

Исправьте строку следующим образом: nemyData = [NSArray arrayWithObjects:enemy1, enemy2, nil]; и вам должно быть хорошо.

Обратите внимание, что вы можете столкнуться с проблемой памяти, потому что ваши переменные автоматически освобождены, если вы хотите получить к ним доступ позже (что, я полагаю), вам нужно сохранить их.

0 голосов
/ 07 апреля 2010

Помимо проблемы, которую вы подняли (на которую уже был дан ответ), существует также проблема со строкой формата NSLog. % f для двойников, а не для объектов. Вам нужно использовать% @ для форматирования чего-либо, возвращенного objectForKey: метод NSDictionary. Между прочим, объекты, которые вы храните, являются строками NSStrings. Номера NSN могут быть лучше, например

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