2011-08-19 3 views
39

je traite de NSArray profondément imbriquées et NSDictionary de et il prend beaucoup de temps pour dire le moins. [data objectatindex: 0] valueForKey: @ "blah"] etc etcEmbellissez NSLog de NSArray & NSDictionary

Est-ce que quelqu'un connait une catégorie iOS pour récursivement enregistrer la structure, surligner le type et afficher les valeurs?

demandez peut-être un peu beaucoup mais on ne sait jamais :)

+0

similaires aux plists façon sont affichées dans XCode? Est-ce que ceci doit être affiché sur l'appareil ou est-ce juste pour que vous l'utilisiez? –

Répondre

43

Peut-être comme ça?

for (id key in dictionary) { 
    NSLog(@"key: %@, value: %@ \n", key, [dictionary objectForKey:key]); 
} 

mais je ne peux pas penser à une belle façon d'obtenir la sortie, sauf belle copie & coller dans un jsonFormatter (par exemple)

EDIT: @Andrey Starodubtsev a la solution pour XCode > 5.x ci-dessous:

NSLog(@"%@", dictionaryYouWantToPrint); 
+0

Vous voulez décrire comment cela (passer l'objet à 'NSLog()' avec le spécificateur '% @') fonctionne? – Droppy

+0

@Droppy vous voulez dire cette question? http://stackoverflow.com/questions/2634099/basic-objective-c-syntax – Gotschi

1

peut-être que vous pouvez utiliser le bloc après iOS5, comme

[anArray enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) { 
    NSLog (@"object->%@",object); 
}]; 

[aDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop){ 
    NSLog(@"key->%@, value-> %@",key,object); 
}]; 
122

Hmm. Simple

NSLog(@"%@", dictionaryYouWantToPrint); 

résultats suivants résultat pour moi:

{ 
    id = 1; 
    matchCount = 0; 
    matchPattern = abcdef; 
    number = "123456"; 
    sessionID = 5; 
    status = Unknown; 
    timerStart = 1367229348; 
} 
+5

Vous vous demandez comment cette réponse n'a pas tous les votes ... – memmons

+0

celui-ci a été écrit deux ans plus tard, alors que cette réponse est tout à fait correcte, l'utilisateur a accepté le mien et peut-être ils ont changé comment les dictionnaires sont imprimés dans xcode. devrais-je le supprimer? idk – Gotschi

+0

@ Gotschi vous pouvez le modifier et mettre à jour la réponse –

1

Cette imprimera dans la console sans NSLog.

Au cours de débogage, lorsque votre point d'arrêt est en dessous de votre dictionnaire, vous pouvez taper dans la console

NSDictionary * myDict = ...; 

po mondict

et vous obtiendrez le dictionnaire imprimé dans la console.

Vous pouvez même jeter des objets à un autre type dans la console:

enter image description here

Questions connexes