为什么我得到“[__NSArrayI allKeys]:无法识别的选择器发送到实例”/为什么NSDictionary转换?

时间:2013-07-31 22:10:51

标签: ios objective-c api nsarray nsdictionary

查看此[__NSArrayI allKeys]: unrecognized selector sent to instance错误,当您向NSArray发送allKeys消息时,似乎会发生NSDictionary消息,但在这种情况下我很清楚地发送给 NSDictionary *articles = [response objectForKey:@"list"]; // Create an array we can use to sort the keys (and thus the articles) in order of when they were added NSMutableArray *allKeys = [[articles allKeys] mutableCopy]; 一个NSDictionary。

以下是我与Pocket API接口时使用的代码:

articles

最后一行会导致错误。但(lldb) po articles $5 = 0x082103e0 <__NSArrayI 0x82103e0>( ) (lldb) po [articles class] $6 = 0x01b83b8c __NSArrayI (lldb) 非常清楚地声明为NSDictionary?为什么不喜欢它?

奇怪的是,如果我在运行时检查它,它说它是一个NSArray!为什么会改变?

{{1}}

1 个答案:

答案 0 :(得分:6)

它可能在您的代码中声明为字典,但这并不能使它成为字典。它确实是一个数组,这就是你获得异常的原因。检查您的response,以便了解您的期望。

您的代码编译是因为编译器不知道它将是一个数组并且它相信它将是一个字典。这样做是因为objectForKey:返回id