调试器输出中的未知__lldb_autogen_pair类型

use*_*693 1 objective-c lldb afnetworking

我正在从服务器加载JSON,发现非常奇怪的类型名称,并且不知道如何处理它 在此输入图像描述

什么struct _lldb_autogen_pair意思,为什么它在那里,当JSON是:

原版的:

{
"2011.10.06": [
  {
    "place":"home",
    "role":0,
    "title":"abc"
  }
],
}
Run Code Online (Sandbox Code Playgroud)

更新 我有AFHTTPRequestOperationManager的单例子类,所以我做

client = [[VZWebClient alloc] initWithBaseURL:[NSURL URLWithString:kVZWebClientHostName]];
client.responseSerializer = [AFJSONResponseSerializer serializer];
Run Code Online (Sandbox Code Playgroud)

在NSLOG,没有任何惊喜,一切都好

Enr*_*ata 5

您正在查看NSDictionary的内容.容器在逻辑上由键==>值对组成.

但是,如果你去查看字典的内存中表示,它只是存储一系列对象指针,例如像

0x123 (key)
0x456 (value)
0x356 (key)
0x577 (value)
...
Run Code Online (Sandbox Code Playgroud)

如果您是LLDB,则需要找到一种方法,将每个密钥与其值组合在一起.在C++中,这是一个简单的问题,因为你可以使用std :: pair <>(并且C++ std :: map <>倾向于在内部使用该类型来存储条目,因此你可以免费获得分组).在ObjC中,您需要一些可以让您进行分组的东西.

所以我们所做的就是生成一个假的__lldb_autogen_nspair,它基本上归结为

struct __lldb_autogen_nspair { id key; id value; };
Run Code Online (Sandbox Code Playgroud)

我们将NSDictionary作为这些结构的容器呈现.

这个名字几乎就是说"嘿这是一个LLDB实现细节,不要担心它".