Como visualizar conteúdo de NSDictionary variável no Xcode depurador?
-
02-07-2019 - |
Pergunta
Existe uma maneira de ver os pares de chave / valor de uma variável NSDictionary através do depurador Xcode? Aqui é a extensão de informação quando se está totalmente expandido na janela de variável:
Variable Value Summary
jsonDict 0x45c540 4 key/value pairs
NSObject {...}
isa 0xa06e0720
Eu estava esperando que ele me mostrar cada elemento do dicionário (semelhante a uma variável de matriz).
Solução
Na janela gdb você pode usar po
para inspecionar o objeto.
dada:
NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
definir um ponto de interrupção depois que os objetos são adicionados você pode inspecionar o que está no dicionário
(gdb) po dict
{
bar = foo;
buz = fiz;
}
Claro que estas são NSString
objetos que imprima bem. YMMV com outros objetos complexos.
Outras dicas
Você pode botão direito do mouse qualquer objeto variável (ObjC ou Foundation Core) e selecione “Imprimir Descrição para Console” (também em Run-> Variáveis ??de vista). Isto imprime o resultado do método -debugDescription
do obejct, que por padrão chama -description
. Infelizmente, NSDictionary
substitui essa para produzir um monte de dados internos a você geralmente não se preocupam, por isso, em solução neste caso de craigb específica é melhor.
As chaves e valores exibidos também usam -description
, por isso, se você deseja obter informações úteis sobre seus objetos em coleções e em outros lugares, substituindo -description
é uma obrigação. Eu geralmente implementá-lo ao longo destas linhas, para corresponder ao formato da implementação NSObject
padrão:
-(NSString *) description { return [NSString stringWithFormat:@"<%@ %p>{foo: %@}", [self class], self, [self foo]]; }
Você pode usar CFShow ()
NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
CFShow(dict);
Na saída você verá
{
bar = foo;
buz = fiz;
}
Xcode 4.6 adicionou as seguintes funcionalidades que podem ser úteis para você
The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger
Agora você pode inspecionar esses tipos de objetos sem ter que imprimir todo o objeto no console. Divirta-se!
Clique no seu dict, em seguida, clique no pequeno ícone "i", deve fazer o trabalho :-)
Você também pode usar NSLog .
Além disso, você pode ir na área de depuração ou Xcode, e depois descobrir All Variables, Registers, Globals and Statics
em seguida, selecione a variável. clique direito sobre ele. Em seguida, selecione Print description of "...."
Espero que ajude!
Se você gostaria de imprimir estes em uma ação de ponto de interrupção no Xcode moderno (sim, eu sou 10 anos após o post original!) Usar a seguinte expressão ponto de interrupção em uma ação "Log Message":
@ myDictionary.description @
Abaixo está um screenshot da minha ação breakpoint onde o evento variável é um NSString ea variável contextData é o NSDictionary que estou registrando o conteúdo: :