如何在调试器控制台中获取NSDictionary对象的值/键?

时间:2012-08-16 19:48:20

标签: objective-c ios lldb

我设置了一个断点......

如果我这样做:

(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

我做错了什么?

5 个答案:

答案 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-objectpo

(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]来获取值。