Jak wyświetlić zawartość zmiennej NSDictionary w debugerze Xcode?

Czy istnieje sposób, aby wyświetlić pary klucz / wartość zmiennej NSDictionary za pomocą debugera Xcode? Oto zakres informacji, gdy jest ona w pełni rozwinięta w oknie zmiennej:

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

Spodziewałem się, że pokaże mi każdy element słownika (podobny do zmiennej tablicy).

Author: Ned Batchelder, 2008-09-22

6 answers

W oknie gdb można użyć po do sprawdzenia obiektu.

Podane:

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

Ustawianie punktu przerwania po dodaniu obiektów można sprawdzić, co znajduje się w słowniku

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

Oczywiście są to NSString obiekty, które ładnie drukują. YMMV z innymi złożonymi obiektami.

 134
Author: craigb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 01:51:12

Możesz kliknąć prawym przyciskiem myszy dowolny obiekt (ObjC lub Core Foundation) i wybrać "Drukuj opis do konsoli" (również w widoku Run->Variables). Wyświetla wynik metody -debugDescription, która domyślnie wywołuje -description. Niestety, NSDictionary nadpisuje to, aby wytworzyć kilka wewnętrznych danych, na których generalnie Ci nie zależy, więc w tym konkretnym przypadku rozwiązanie craigba jest lepsze.

Wyświetlane klucze i wartości również używają -description, więc jeśli chcesz uzyskać przydatne informacje o swoich obiektach w kolekcjach i gdzie indziej, nadrzędne -description jest koniecznością. Zazwyczaj implementuję go w następujący sposób, aby dopasować format domyślnej implementacji NSObject:

-(NSString *) description
{
    return [NSString stringWithFormat:@"<%@ %p>{foo: %@}", [self class], self, [self foo]];
}
 30
Author: Jens Ayton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-28 20:23:34

Możesz użyć CFShow ()

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

W wyjściu zobaczysz

{
  bar = foo;
  buz = fiz;
}
 6
Author: uranpro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-27 06:58:53

XCode 4.6 dodał następującą funkcjonalność, która może być dla ciebie pomocna

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

Teraz możesz sprawdzić te typy obiektów bez konieczności drukowania całego obiektu w konsoli. Smacznego!

Źródło: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_6.html

 3
Author: jkatzer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-19 22:06:15

Kliknij na swój dict, a następnie kliknij na małą ikonkę "i", powinno wykonać zadanie :-) Xcode5, zobacz wartość dict

 1
Author: Taiko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-26 04:48:06

Możesz również użyć NSLog .

Możesz również przejść do obszaru debugowania lub xcode, a następnie dowiedzieć się All Variables, Registers, Globals and Statics, a następnie wybrać zmienną. Kliknij prawym przyciskiem myszy. Następnie wybierz Print description of "...."

Mam nadzieję, że to pomoże!
 0
Author: user1873574,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-19 13:56:41