14

我设置了一个断点...

如果我做:

(lldb) print [self dictionary]
(NSDictionary *) $5 = 0x0945c760 1 key/value pair

但如果我这样做:

(lldb) print [[self dictionary] allKeys]
error: no known method '-allKeys'; cast the message send to the method's return type
error: 1 errors parsing expression

即使我尝试访问我知道在那里的密钥..

(lldb) print [[self dictionary] objectForKey:@"foobar"]
error: no known method '-objectForKey:'; cast the message send to the method's return     type
error: 1 errors parsing expression

我究竟做错了什么?

4

5 回答 5

19
error: no known method '-objectForKey:'; cast the message send to the method's return type

因此,它告诉您它不能仅从发送的消息的名称中推断出返回类型信息——这很好。它甚至会告诉您如何准确地解决该问题 - 您必须消息发送到方法的返回类型

启动 Apple 的文档,我们发现- [NSDictionary objectForKey:]返回id- 通用的 Objective-C 对象类型。转换为 id (或者更好的是,如果您知道字典包含哪些类型的对象,则转换为该确切的对象类型)可以解决问题:

(lldb) print (MyObject *)[(NSDictionary *)[self dictionary] objectForKey:@"foobar"]
于 2012-08-16T19:57:07.797 回答
15

lldb 命令 print 期望您要打印的值是非对象。您应该用来打印对象的命令是 po。

当您告诉 lldb 打印该值时,它会查找一个名为 allKeys 的方法,该方法返回一个非对象并失败。请尝试以下命令...

po [[self dictionary] allKeys]
于 2012-08-16T19:57:01.007 回答
3

description在 GDB 或 LLDB 中打印对象的 ,您需要使用print-objectpo

(lldb) po [self dictionary]
(lldb) po [[self dictionary] objectForKey:@"foobar"]
于 2012-08-16T20:00:05.117 回答
2

为什么不只是做

NSLog(@"dict: %@", dictionary);

或者

NSLog(@"dict objectForKey:foobar = %@", [dictionary objectForKey:@"foobar"]);
于 2012-08-16T19:56:00.933 回答
0

目前 lldb 中似乎存在一个错误,导致po dictionary[@"key"]打印空行而不是键的值。用于[dictionary[@"key"] description]获取值。

于 2016-06-20T19:08:33.373 回答