【问题标题】:How can get the values of NSDictionary using keys where the dictionaries are stored in NSArray?如何使用字典存储在 NSArray 中的键获取 NSDictionary 的值?
【发布时间】:2010-04-07 11:08:00
【问题描述】:

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

【问题讨论】:

  • 这是正确的方法;因此,如果它不起作用,则其他错误(例如,您要检索的对象可能不是真正的 NSDictionary)。发布您用于创建、存储和访问 NSDictionary 的代码以及确切的错误消息可能会有所帮助。
  • 这也可能有助于将调用分解为中间步骤(例如,将字典从数组中取出到一个临时变量中。如果这不会立即导致您遇到问题,您可能会发现它更容易此时在调试器中单步执行。
  • 我也发布了我的程序。谢谢。

标签: objective-c cocoa-touch nsarray nsdictionary


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您对内存问题的帮助和建议。我更正了我的代码。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2016-04-13
    • 2011-06-29
    相关资源
    最近更新 更多