我设置了一个断点......
如果我这样做:
(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
我做错了什么?
答案 0 :(得分:17)
非常好,我们已经完成了艰难的部分。现在您已经使用调试器了解彼此,让我们看看它的建议:
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"]
答案 1 :(得分:13)
lldb命令打印期望您要打印的值是非对象。您应该用来打印对象的命令是po。
当告诉lldb打印该值时,它会查找一个名为allKeys的方法,该方法返回一个非对象并失败。请尝试以下命令...
po [[self dictionary] allKeys]
答案 2 :(得分:3)
要在GDB或LLDB中打印对象的description
,您需要使用print-object
或po
。
(lldb) po [self dictionary]
(lldb) po [[self dictionary] objectForKey:@"foobar"]
答案 3 :(得分:2)
为什么不做呢
NSLog(@"dict: %@", dictionary);
或
NSLog(@"dict objectForKey:foobar = %@", [dictionary objectForKey:@"foobar"]);
答案 4 :(得分:0)
目前lldb中似乎存在一个错误,导致po dictionary[@"key"]
打印空行而不是键的值。请使用[dictionary[@"key"] description]
来获取值。