2010-04-07 80 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"... 
相關問題