Retrieving NSArray From an NSDictionary



我正试图获得一个充满数据的数组,当我运行这个数组时,我一直收到BAD_ACCESS错误,尽管在调用数组时我没有包括在这里,但我甚至注释了该代码,并尝试将其调用到日志中,但仍然收到BAD_CCESS错误。数组存储在字典中,字典中包含一个数字键。我不确定我在这里做错了什么。

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. 如果没有-init调用,就不应该有空的[MyClass alloc]。init应该调用super的init,后者负责设置新对象。

  2. 您的-valueForKey:应该是-objectForKey:。在这种情况下,差异可能并不重要,但前者用于"KVC"编码,而您没有使用它。如果将其设置为对象,则将其获取为对象。

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

您的数组很可能是空的。您可以尝试打印NSLog(@"count = %d", array.count);,看看情况是否如此。

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

你不能直接设置数组的原因是什么?当字典只有一把钥匙时,你有理由使用它吗?

最新更新