web-dev-qa-db-fra.com

Comment afficher le contenu de la variable NSDictionary dans le débogueur Xcode?

Existe-t-il un moyen d'afficher les paires clé/valeur d'une variable NSDictionary via le débogueur Xcode? Voici l'étendue des informations lorsqu'elles sont entièrement développées dans la fenêtre variable:

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

Je m'attendais à ce qu'il me montre chaque élément du dictionnaire (similaire à une variable de tableau).

84
Dara Kong

Dans la fenêtre gdb, vous pouvez utiliser po pour inspecter l'objet.

donné:

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

définir un point d'arrêt après l'ajout des objets, vous pouvez inspecter ce qui se trouve dans le dictionnaire

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

Bien sûr, ce sont des objets NSString qui s’impriment bien. YMMV avec d'autres objets complexes.

138
craigb

Vous pouvez cliquer avec le bouton droit sur n'importe quelle variable d'objet (ObjC ou Core Foundation) et sélectionner "Imprimer la description sur la console" (également dans la vue Exécuter-> Variables). Ceci imprime le résultat de la méthode -debugDescription De l’objet, qui par défaut appelle -description. Malheureusement, NSDictionary remplace cela pour produire un tas de données internes dont vous ne vous souciez généralement pas, donc dans ce cas spécifique, la solution de craigb est meilleure.

Les clés et valeurs affichées utilisent également -description, Donc si vous voulez des informations utiles sur vos objets dans les collections et ailleurs, remplacer -description Est un must. Je l'implémente généralement dans ce sens, pour correspondre au format de l'implémentation par défaut NSObject:

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

Vous pouvez utiliser CFShow ()

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

En sortie, vous verrez

{
  bar = foo;
  buz = fiz;
}
6
uranpro

XCode 4.6 a ajouté les fonctionnalités suivantes qui peuvent vous être utiles

The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger

Vous pouvez maintenant inspecter ces types d'objets sans avoir à imprimer l'intégralité de l'objet dans la console. Prendre plaisir!

Source: http://developer.Apple.com/library/mac/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_6.html

3
jkatzer

Cliquez sur votre dict, puis cliquez sur la petite icône "i", elle devrait faire l'affaire :-) Xcode5, view the value of a dict

1
Taiko

Si vous souhaitez les imprimer dans une action de point d'arrêt dans le XCode moderne (oui, je suis 10 ans après la publication d'origine!), Utilisez l'expression de point d'arrêt suivante dans une action "Log Message":

@ myDictionary.description @

Ci-dessous est une capture d'écran de mon action de point d'arrêt où l'événement variable est une chaîne NSS et la variable contextData est le NSDictionary dont j'enregistre le contenu: :

1
Pat

Vous pouvez également utiliser NSLog .

Vous pouvez également aller dans la zone de débogage ou xcode, puis découvrir All Variables, Registers, Globals and Statics puis sélectionnez votre variable. Faites un clic droit dessus. Sélectionnez ensuite Print description of "...."

J'espère que ça aide!

0
user1873574