Question

Est-il possible d'afficher les paires clé / valeur d'une variable NSDictionary via le débogueur Xcode? Voici l'étendue des informations lorsqu'elles sont complètement développées dans la fenêtre de la 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 (semblable à une variable de tableau).

Était-ce utile?

La solution

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éfinissant un point d'arrêt après l'ajout des objets, vous pouvez consulter le contenu du 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.

Autres conseils

Vous pouvez cliquer avec le bouton droit de la souris sur toute variable d'objet (ObjC ou Core Foundation) et sélectionner "Imprimer la description sur la console" (également dans la vue des variables Exécuter). Ceci affiche le résultat obtenu avec la méthode -debugDescription de l'objet, qui appelle par défaut -description . Malheureusement, NSDictionary l'ignore pour produire une série de données internes qui ne vous intéressent généralement pas. Par conséquent, dans ce cas précis, la solution de craigb est préférable.

Les clés et les valeurs affichées utilisent également -description . Par conséquent, si vous souhaitez des informations utiles sur vos objets dans les collections et ailleurs, il est impératif de remplacer -description . Je l'implémente généralement selon ces lignes, pour correspondre au format de l'implémentation par défaut de NSObject :

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

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;
}

XCode 4.6 a ajouté les fonctionnalités suivantes qui pourraient 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'objet sans avoir à imprimer l'intégralité de l'objet dans la console. Profitez!

Source: http: // développeur .apple.com / library / mac / # documentation / DeveloperTools / Conceptual / WhatsNewXcode / Articles / xcode_4_6.html

Cliquez sur votre dict, puis cliquez sur le petit " i " icône, il devrait faire le travail :-) Xcode5, affichez la valeur d'un dict

Vous pouvez également utiliser NSLog .

Vous pouvez également aller dans la zone de débogage ou dans le xcode, puis rechercher Toutes les variables, registres, globes et statiques , puis sélectionner votre variable. Faites un clic droit dessus. Sélectionnez ensuite Imprimer la description de "...."

.

J'espère que ça aide!

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

@ myDictionary.description @

Ci-dessous, une capture d'écran de mon action de point d'arrêt où l'événement de variable est une chaîne NSString et la variable contextData est le NSDictionary dont je suis en train de consigner le contenu: :

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top