2010-04-07 2 views
1

Я создал 5 NSDictionary's. Я сохранил их в NSArray. Мне нужно получить значения, хранящиеся в NSDictionaries. Как это можно сделать? Я пробовал звонить [[array objectAtIndex:i]objectForKey:key1]. Но, это сбой, отправив сообщение: непризнанный селектор отправлен в экземпляр Как получить данные?Как получить значения NSDictionary, используя ключи, в которых словари хранятся в NSArray?

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, а также точное сообщение об ошибке. –

+0

Это также может помочь разбить вызов на промежуточные этапы (например, вывести словарь из массива во временную переменную. Если это не сразу приведет вас к этой проблеме, вам может быть проще перейти в отладчик в этот пункт. – philsquared

+0

Я отправил свою программу также. Спасибо. –

ответ

3

Вы добавляете к вашему массиву строки @ "enemy1" и @ "enemy2", а не словари.

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

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

+1

Благодарим вас за помощь и предложение по проблеме памяти. Я исправил свой код. –

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^