如何在Xcode调试器中查看NSDictionary变量的内容?

时间:2020-03-06 14:31:13  来源:igfitidea点击:

是否可以通过Xcode调试器查看NSDictionary变量的键/值对?这是在变量窗口中完全展开时的信息范围:

Variable  Value      Summary
jsonDict  0x45c540   4 key/value pairs
 NSObject {...}
  isa     0xa06e0720

我期望它能向我展示字典的每个元素(类似于数组变量)。

解决方案

在gdb窗口中,我们可以使用po来检查对象。

给出:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];

在添加对象之后设置断点,我们可以检查字典中的内容

(gdb) po dict
{
  bar = foo;
  buz = fiz;
}

当然,这些都是NSString对象,可以很好地打印。 YMMV与其他复杂对象。

我们可以右键单击任何对象(ObjC或者Core Foundation)变量,然后选择"将描述打印到控制台?"(也在"运行"->"变量视图"中)。这会用obejcts的-debugDescription方法打印结果,默认情况下会调用-description。不幸的是,NSDictionary会覆盖它以产生我们通常不关心的一堆内部数据,因此在这种特定情况下,craigbs解决方案更好。

显示的键和值也使用-description,因此,如果我们想要有关集合和其他地方对象的有用信息,则必须覆盖-description。我通常按​​照以下方式实现它,以匹配默认NSObject实现的格式:

-(NSString *) description
{
    return [NSString stringWithFormat:@"<%@ %p>{foo: %@}", [self class], self, [self foo]];
}