2

このエラーを調べると、NSArray にメッセージを[__NSArrayI allKeys]: unrecognized selector sent to instance送信するときに発生するように見えますが、この場合は非常に明確に NSDictionary に送信しています。allKeysNSDictionary

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 に答える