2008-09-22 5 views
83

Gibt es eine Möglichkeit, die Schlüssel/Wert-Paare einer NSDictionary-Variable über den Xcode-Debugger anzuzeigen? Hier ist der Umfang der Informationen, wenn sie vollständig in das Variablenfenster erweitert wird:Wie Inhalte der NSDictionary Variable in Xcode Debugger anzeigen?

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

ich es erwartet hatte, mir zu zeigen, jedes Element des Wörterbuchs (ähnlich einer Array-Variablen).

Antwort

133

Im gdb-Fenster können Sie das Objekt mit po untersuchen. Sie können im Wörterbuch

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

einen Haltepunkt einstellen, nachdem die Objekte hinzugefügt untersuchen, was diese

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

Natürlich NSString Objekte sind, die gut zu drucken:

gegeben. YMMV mit anderen komplexen Objekten.

+7

Hallo! Was ist gdb? Was ist po? Nicht sicher zu verstehen ... Danke für Ihre Hilfe! :) – Martin

+1

Ok, also habe ich herausgefunden, dass GDB für GNU-Debugger steht und eigentlich das Debugger-Fenster von Xcode ist.Jetzt muss ich finden, was ist po – Martin

+18

OK! Also ist gdb eine Eingabeaufforderung in der Konsole, wo Sie Befehle eingeben können. Durch Eingabe von "po object_name" wurde der Inhalt des Objekts in der Konsole ausgedruckt. – Martin

30

Sie können mit der rechten Maustaste auf eine Objektvariable (ObjC oder Core Foundation) klicken und "Beschreibung in Konsole drucken" auswählen (auch in Run-> Variables View). Dadurch wird das Ergebnis der Methode -debugDescription des Objekts ausgegeben, die standardmäßig -description aufruft. Leider überschreibt NSDictionary dies, um eine Menge interner Daten zu erzeugen, die Ihnen im Allgemeinen egal sind. In diesem speziellen Fall ist craigbs Lösung also besser.

Die angezeigten Schlüssel und Werte verwenden auch -description. Wenn Sie also nützliche Informationen über Ihre Objekte in Sammlungen und an anderen Stellen benötigen, ist das Überschreiben -description ein Muss. Ich implementieren es in der Regel in diese Richtung, um das Format der Standard NSObject Implementierung übereinstimmen:

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

können Sie verwenden CFShow()

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

In Ausgabe werden Sie

{ 
    bar = foo; 
    buz = fiz; 
} 
0

sehen Sie können auch NSLog verwenden.

Sie können auch in Debug-Bereich oder xcode gehen, dann finden Sie All Variables, Registers, Globals and Statics dann wählen Sie Ihre Variable. Rechtsklick darauf. Dann wählen Sie Print description of "...."

Hoffe es hilft!

3

XCode 4.6 hat die folgenden Funktionen hinzugefügt, die hilfreich sein können, um Sie

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

Jetzt können Sie diese Objekttypen untersuchen, ohne dass das gesamte Objekt in der Konsole zu drucken. Genießen!

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

+0

Das ist fehlerhaft für mich - zeigt nur einen Teil meines NSDictionary –

0

Klicken Sie auf Ihre dict klicken, dann auf das kleine "i" -Symbol, sollte es die Arbeit machen :-) Xcode5, view the value of a dict