2

查找此[__NSArrayI allKeys]: unrecognized selector sent to instance错误,它似乎发生在您向 NSArray 发送用于 的allKeys消息时NSDictionary,但在这种情况下,我非常清楚地将其发送到 NSDictionary。

这是我与 Pocket API 交互时使用的代码:

        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];

那里的最后一行导致错误。但是articles非常明确地声明为 NSDictionary?为什么不喜欢它?

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

(lldb) po articles
$5 = 0x082103e0 <__NSArrayI 0x82103e0>(

)

(lldb) po [articles class]
$6 = 0x01b83b8c __NSArrayI
(lldb) 
4

1 回答 1

6

它可能在您的代码中声明为字典,但这并不能使其成为字典。它确实是一个数组,这就是你得到异常的原因。检查你的response,这样你就知道你应该期待什么。

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

于 2013-07-31T22:13:08.947 回答