2011-08-19 13 views
39

Mam do czynienia z głęboko zagnieżdżonymi NSArray i NSDictionary's i jest to bardzo czasochłonne co najmniej. [dane objectatindex: 0] valueForKey: @ "blah"] etceteraUpiększyć NSLog NSArray i NSDictionary

Czy ktoś wie o ładnej kategorii iOS, aby rekursywnie rejestrować strukturę, wyróżniać typ i pokazywać wartości?

może być pytaniem trochę dużo, ale nigdy nic nie wiadomo :)

+0

podobny sposób listy właściwości są wyświetlane w Xcode? Czy ma to być wyświetlane na urządzeniu, czy tylko do użytku? –

Odpowiedz

43

Może tak?

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

ale nie mogę myśleć o jakiejkolwiek dobry sposób na uzyskanie wyjście piękny wyjątkiem kopii & wkleić go do jsonFormatter (na przykład)

EDIT: @Andrey Starodubtsev ma rozwiązanie dla XCode > 5.x poniżej:

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

Chcesz opisać, jak to działa (przekazywanie obiektu do 'NSLog()' ze specyfikatorem '% @')? – Droppy

+0

@ Czy masz na myśli to pytanie? http://stackoverflow.com/questions/2634099/basic-objective-c-syntax – Gotschi

1

może można użyć bloku po iOS5, jak

[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. Proste

NSLog(@"%@", dictionaryYouWantToPrint); 

wyjścia następujący wynik dla mnie:

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

Zastanawiasz się, jak ta odpowiedź nie ma wszystkich głosów ... – memmons

+0

ta została napisana dwa lata później, podczas gdy ta odpowiedź jest całkowicie poprawna, użytkownik przyjął moje i może zmienili sposób, w jaki słowniki są drukowane w xcode. czy powinienem to usunąć? idk – Gotschi

+0

@Gotschi można edytować i aktualizować odpowiedź –

1

To będzie drukować w konsoli bez NSLog.

Podczas debugowania, gdy punkt przerwania jest poniżej słownika, można wpisać w konsoli

NSDictionary * myDict = ...; 

PO myDict

a dostaniesz drukowane słownika w konsoli.

Można nawet rzucić obiektów do innego rodzaju w konsoli:

enter image description here