我正试图获得一个充满数据的数组,当我运行这个数组时,我一直收到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];
您没有确切说明它在哪里崩溃,这里也没有明显的崩溃错误,因此很难诊断出实际问题。这可能是您所展示的代码之外的内存管理问题。但这里发生了一些可疑的事情:
-
如果没有
-init
调用,就不应该有空的[MyClass alloc]
。init应该调用super的init,后者负责设置新对象。 -
您的
-valueForKey:
应该是-objectForKey:
。在这种情况下,差异可能并不重要,但前者用于"KVC"编码,而您没有使用它。如果将其设置为对象,则将其获取为对象。 -
作为字典关键字的
@"2"
与输入的NSNumber不匹配。NSNumbers不是数字的字符串版本,所以您不太可能在其中找到任何值。相反,请使用相同的[NSNumber numberWithInt:2]
模式。
您的数组很可能是空的。您可以尝试打印NSLog(@"count = %d", array.count);
,看看情况是否如此。
如果你的dic
是在第二块代码中设置的,那么第一块中的NSDictionary *dic = [is getData:...]
是什么?
你不能直接设置数组的原因是什么?当字典只有一把钥匙时,你有理由使用它吗?