46 votes

Comment vider les données stockées dans un objet objective-c (NSArray ou NSDictionary)

Pardonnez-moi pour une potentiellement stupide question ici, mais dans d'autres langages de programmation (de script comme PHP ou Perl), il est souvent facile de vider tout ce qui est contenu dans une variable.

Par exemple, en PHP il y a de l' var_dump() ou print_r() fonctions. Perl a l' Data::Dumper CPAN classe, etc etc.

Est là quelque chose comme cela pour Objective-C? Il serait très pratique dans quelques cas, pour être en mesure de vider tout comme ça, au lieu d'utiliser gdb pour inspecter chaque variable.

72voto

Barry Wark Points 73462

Dans le Cacao, il n'y a pas de "vidage" comme PHP print_r ou python repr puisqu'il n'est pas au format texte qui "représente" un objet, comme dans ces langues. Si vous utilisez

NSLog(@"%@", myObj);

ou

NSString *stringRep = [NSString stringWithFormat:@"%@",myObj];

ou

NSString *stringRep = [myObj description];

vous obtiendrez (connecté à la console dans le premier cas), le résultat d' [myObj description], une méthode définie en NSObject pour la fin de l'impression de la description (pas un dump) d'un objet.

Si vous appelez po myObj de gdb, vous bénéficiez d' [myObj debugDescription] (souvent les mêmes que description, mais pas toujours).

Des Classes comme l' NSArray et NSDictionary et NSData remplacer description imprimer une jolie utile récursive description de leur contenu, mais par défaut [NSObject description] imprime uniquement la valeur du pointeur correspondant à l'instance.

Si vous contrôlez le code pour les types en question, vous pouvez remplacer leur description ou debugDescription méthodes pour renvoyer tout ce que vous voulez. Si non, vous pourriez remplacer l' description ou debugDescription méthode à l'aide d'une catégorie, ou l'utilisation d'une catégorie pour définir un myDebugDescription ou de certaines de ces que vous pouvez ensuite appeler à partir de gdb à l'aide de po [myObj myDebugDescription].

17voto

Ben Gottlieb Points 59900

vous pouvez également utiliser la commande gdb print object pour afficher rapidement un objet dans le débogueur:

 po dictionary
 

Ce sera fondamentalement la même chose que d'appeler NSLog (...) depuis votre code.

Également utile lors de l’impression de NSData contenant des données ASCII:

 p (char *) [data bytes]
 

10voto

Jason Coco Points 52303

Utilisation NSLog() pour vider le contenu des objets. Par exemple:

NSData* myData = //... assume this exists
NSLog(@"Contents of myData: %@", myData);

NSLog a un printf de style chaîne de format (attend un objet NSString), suivie par une liste variable de paramètres, comme le printf. Le caractère de remplacement %@ représente un objet la description de la méthode sur un objet. Ceci est utile pour le dumping la plus Objective-C objets dans le Cacao.

Si vous voulez vider le contenu d'un objet à l'aide de gdb (je vous vois marqués ce avec gdb), utiliser le "po" directive au lieu de les imprimer. Par exemple:

gdb) po myData

sera la cause de gdb pour vider les myData objet. po est un raccourci pour l'impression de l'objet.

4voto

diciu Points 18634

Soyez prudent avec la journalisation NSLog -> vous n'en voulez probablement pas dans le code de production.

Vous souhaiterez peut-être utiliser une autre fonction de journalisation qui appelle NSLog lorsque votre produit s'exécute en mode débogage.

3voto

TCB13 Points 943

Je vais habituellement avec ceci pour "déboguer" le contenu de NSArray:

 NSEnumerator *arrenum = [myarray objectEnumerator];
id cobj;     
while ( cobj = [arrenum nextObject] ) {
   NSLog(@"%@", cobj);
}
 

Le code énumérera tous les objets de NSArray myarray , puis parcourera et imprimera chaque objet.

J'espère que cela peut être utile pour quelqu'un!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X