2012-08-03 109 views
-2

我想获得一个数组,我的数据充满了,当我运行这个虽然在调用数组时我不断收到一个BAD_ACCESS错误,但是我没有在这里包含这个数组,尝试只是将它调用到日志,仍然得到BAD_ACCESS错误。该数组存储在包含一个数字的一​​个键的字典中。我不确定我在这里做错了什么。从NSDictionary中检索NSArray

ISData *is = [[ISData alloc] init]; 
NSDictionary *dic = [is getData:@"right" : isNumber]; 

NSArray *array = [[NSArray alloc] initWithArray:[dic valueForKey:@"2"]]; 

NSString *out = [array objectAtIndex:0]; 

怎样词典创建:

NSNumber* key = [NSNumber numberWithInt:isNumber]; 
NSArray *values = [NSArray arrayWithObjects:[NSString stringWithUTF8String:name], [NSString stringWithUTF8String:desc], [NSString stringWithUTF8String:intent], nil]; 

[dic setObject:values forKey:key]; 
+1

'NSDictionary * dic = [is getData:@“right”:isNumber];'那条线应该是干什么的?据我所知,这根本不是有效的语法 – 2012-08-03 17:45:16

+0

我不知道ISData是什么... – NSPunk 2012-08-03 17:47:19

+3

@DanF:这是有效的语法。参数在ObjC中不需要名称。这个选择器看起来像'-getData ::'。尽管在现代的ObjC中它是非惯用的,除了在不寻常的利基用途。 – 2012-08-03 17:48:59

回答

0

您不会说崩溃的确切位置,而且您没有明显的崩溃错误,因此很难诊断您的实际问题。这可能是一个内存管理的事情,超出了你所提供的代码。但有两件事情是怎么回事是可疑:

  1. 你不应该有一个光秃秃的[MyClass alloc]没有-init电话。你的init应该调用super的init,它负责设置新的对象。

  2. 您的-valueForKey:应该是-objectForKey:。在这种情况下,差异可能不重要,但前者用于“KVC”编码,而您并未使用该编码。如果您将其设置为对象,请将其作为对象。

  3. 您的@"2"作为字典的关键字不匹配您的输入,这是一个NSNumber。 NSNumbers不是字符串版本的数字,所以你不可能在那里找到任何值。相反,使用相同的[NSNumber numberWithInt:2]模式。

+0

我觉得他在按钮上的权利 – 2012-08-03 17:50:40

+0

这是手工输入的,所以我忘了输入init,但是谢谢你指出。 – ios85 2012-08-03 17:52:52

0

这是最有可能的是你的数组为空。您可以尝试打印NSLog(@"count = %d", array.count);以查看是否属实。

如果你的dic是在第二块代码中设置的,那么NSDictionary *dic = [is getData:...]是什么东西在第一个块?

有没有一个原因,你不能直接设置你的数组?只有一个密钥时,你有使用字典的理由吗?