Hoe de inhoud van de NSDictionary-variabele in Xcode-foutopsporing te bekijken?

Is er een manier om de sleutel/waarde-paren van een NSDictionary-variabele te bekijken via de Xcode-foutopsporing? Dit is de hoeveelheid informatie wanneer deze volledig is uitgevouwen in het variabele venster:

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

Ik verwachtte dat het me elk element van het woordenboek zou tonen (vergelijkbaar met een arrayvariabele).


Antwoord 1, autoriteit 100%

In het gdb-venster kunt u pogebruiken om het object te inspecteren.

gegeven:

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

een breekpunt instellen nadat de objecten zijn toegevoegd, kunt u bekijken wat er in het woordenboek staat

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

Natuurlijk zijn dit NSString-objecten die mooi worden afgedrukt. YMMV met andere complexe objecten.


Antwoord 2, autoriteit 21%

U kunt met de rechtermuisknop op een willekeurige objectvariabele (ObjC of Core Foundation) klikken en “Beschrijving afdrukken naar console” (ook in de weergave Run->Variabelen) selecteren. Dit drukt het resultaat af van de obejct’s -debugDescriptionmethode, die standaard -descriptionaanroept. Helaas heft NSDictionarydit op om een ​​heleboel interne gegevens te produceren waar je normaal gesproken niets om geeft, dus in dit specifieke geval is de oplossing van craigb beter.

De weergegeven sleutels en waarden gebruiken ook -description, dus als u nuttige informatie wilt over uw objecten in collecties en elders, is het overschrijven van -descriptioneen must. Ik implementeer het over het algemeen als volgt, zodat het overeenkomt met het formaat van de standaard NSObject-implementatie:

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

Antwoord 3, autoriteit 4%

U kunt CFShow() gebruiken

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

In de uitvoer zie je

{
  bar = foo;
  buz = fiz;
}

Antwoord 4, autoriteit 2%

XCode 4.6 heeft de volgende functionaliteit toegevoegd die nuttig voor u kan zijn

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

Nu kunt u deze objecttypen inspecteren zonder dat u het hele object in de console hoeft af te drukken. Geniet ervan!

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


Antwoord 5

Klik op je dictaat en klik vervolgens op het kleine “i”-pictogram, het zou het werk moeten doen 🙂


Antwoord 6

Als je deze wilt afdrukken in een breekpuntactie in moderne XCode (ja, ik ben 10 jaar na de oorspronkelijke post!) gebruik dan de volgende breekpuntuitdrukking in een “Logbericht” -actie:

@myDictionary.description@

Hieronder staat een screenshot van mijn breekpuntactie waarbij de variabele gebeurtenis een NSString is en de variabele contextData de NSDictionary is waarvan ik de inhoud log:
:


Antwoord 7

Je kunt ook NSLoggebruiken.

U kunt ook naar het foutopsporingsgebied of xcode gaan, dan All Variables, Registers, Globals and Staticsopzoeken en vervolgens uw variabele selecteren. Klik er met de rechtermuisknop op. Selecteer vervolgens Print description of "...."

Hopelijk helpt het!

Other episodes