ios - 为什么我得到 "[__NSArrayI allKeys]: unrecognized selector sent to instance"/为什么 NSDictionary 正在转换?

标签 ios objective-c api nsarray nsdictionary

查看此 [__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) 

最佳答案

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

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

关于ios - 为什么我得到 "[__NSArrayI allKeys]: unrecognized selector sent to instance"/为什么 NSDictionary 正在转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17981854/

相关文章:

ios - 如何在转换前计算 UIView 的框架?

java - 如何模拟从内部 API 集成测试中调用的外部 API 的响应

c++ - 从用户模式访问 Windows Native API

ios - 在 iPad 上使用 window.overrideUserInterfaceStyle 时暗模式未启用/禁用

ios - 取消 UIControl animateWithDuration 开始新的动画

ios - 无法在 tableviewcontroller 上获得半透明的导航栏。适用于 View Controller 和 TableView

iphone - NSDate 月份加减

c++ - 如何从 Objective C 调用我的 Qt/C++ Dylib?

python - 请求 - 无法在 JSON 正文中以 ISO 8601 格式发布日期

ios - UINavigationController 实例化后 UISearchbar 不可见